You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(7) |
Jul
(26) |
Aug
(85) |
Sep
(141) |
Oct
(85) |
Nov
(60) |
Dec
(29) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(38) |
Feb
(78) |
Mar
(10) |
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <tre...@us...> - 2007-11-10 23:19:09
|
Revision: 568
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=568&view=rev
Author: trevorolio
Date: 2007-11-10 15:19:14 -0800 (Sat, 10 Nov 2007)
Log Message:
-----------
Removed a couple of server-side texture loads which slipped through the cracks, including all pages! That was a triple whammy because the space simulator fetched and rendered the page contents as well as used memory for the resulting texture. This week I'm very thankful for my profiler, which now indicates that the server is loading no textures into memory.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java 2007-11-09 01:53:26 UTC (rev 567)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java 2007-11-10 23:19:14 UTC (rev 568)
@@ -34,7 +34,6 @@
this.animations = animations;
ArgumentUtils.assertNotNull(skinMap);
this.skinMap = skinMap;
- ArgumentUtils.assertNotNull(defaultBaseTexture);
this.defaultBaseTexture = defaultBaseTexture;
ArgumentUtils.assertNotNull(baseTextures);
this.baseTextures = baseTextures;
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-11-09 01:53:26 UTC (rev 567)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-11-10 23:19:14 UTC (rev 568)
@@ -92,7 +92,7 @@
}
public BufferedImage getBodyTexture(String username, long bodyConfigurationID) {
- if(username == null || username.startsWith(WebConstants.GUEST_COOKIE_PREFIX)){
+ if(!loadAppearances || username == null || username.startsWith(WebConstants.GUEST_COOKIE_PREFIX)){
return null;
}
@@ -168,9 +168,9 @@
String name = entry.getName().substring("animation/".length(), entry.getName().length() - 4);
BvhParser parser = new BvhParser(name, entryStream);
animations.add(parser.parse());
- } else if (entry.getName().equals("texture/body.jpg")) {
+ } else if (loadAppearances && entry.getName().equals("texture/body.jpg")) {
defaultBaseTexture = new J3DBodyData.BaseTexture("Default", ImageIO.read(entryStream));
- } else if (entry.getName().startsWith("texture/") && entry.getName().endsWith(".jpg")) {
+ } else if (loadAppearances && entry.getName().startsWith("texture/") && entry.getName().endsWith(".jpg")) {
String name = entry.getName().substring(8, entry.getName().length() - 4);
J3DBodyData.BaseTexture baseTexture = new J3DBodyData.BaseTexture(name, ImageIO.read(entryStream));
baseTextures.add(baseTexture);
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java 2007-11-09 01:53:26 UTC (rev 567)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java 2007-11-10 23:19:14 UTC (rev 568)
@@ -45,9 +45,13 @@
private J3DThingRenderable thingRenderable = null;
- public J3DPageRenderable(Page page, J3DThingRenderable thingRenderable) {
+ private boolean loadTextures = true;
+
+ public J3DPageRenderable(Page page, J3DThingRenderable thingRenderable, boolean loadTextures) {
this.page = page;
this.thingRenderable = thingRenderable;
+ this.loadTextures = loadTextures;
+
setCapability(BranchGroup.ALLOW_DETACH);
pageGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
pageGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
@@ -58,10 +62,10 @@
reloadContent();
}
- public ThingRenderable getThingRenderable(){
+ public ThingRenderable getThingRenderable() {
return thingRenderable;
}
-
+
public void cleanup() {
//removeAllChildren();
//pageGroup.removeAllChildren();
@@ -131,6 +135,10 @@
}
private void updateAppearance(Appearance appearance) {
+ if (!loadTextures) {
+ return;
+ }
+
try {
Texture texImage = null;
if (textRenderer != null) {
@@ -163,6 +171,11 @@
}
imageRenderer = new ImageRenderer((int) textureWidth, (int) textureHeight);
}
+
+ if (!loadTextures) {
+ return;
+ }
+
InputStream contentStream = page.getContent();
if (contentStream == null) {
throw new IOException("Null content stream");
@@ -219,7 +232,9 @@
setBackground(new Color(0.9f, 0.9f, 0.9f));
frame.addNotify();
- image = frame.createImage(width, height);
+ if (loadTextures) {
+ image = frame.createImage(width, height);
+ }
}
public void setImage(Image sourceImage) {
@@ -227,6 +242,9 @@
}
public void updateRender() {
+ if (!loadTextures) {
+ return;
+ }
Graphics graphics = image.getGraphics();
graphics.setClip(0, 0, getPreferredSize().width, getPreferredSize().height);
if (sourceImage == null) {
@@ -258,11 +276,16 @@
setBackground(new Color(0.9f, 0.9f, 0.9f));
frame.addNotify();
- image = frame.createImage(width, height);
- addHyperlinkListener(this);
+ if (loadTextures) {
+ image = frame.createImage(width, height);
+ addHyperlinkListener(this);
+ }
}
public void updateRender() {
+ if(!loadTextures){
+ return;
+ }
Graphics graphics = image.getGraphics();
graphics.setClip(0, 0, getPreferredSize().width, getPreferredSize().height);
paintComponent(graphics);
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-09 01:53:26 UTC (rev 567)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-10 23:19:14 UTC (rev 568)
@@ -264,7 +264,7 @@
Log.error("Tried to add a page to an unknown thing: " + page.getThing().getThingID());
return;
}
- J3DPageRenderable pageRenderable = new J3DPageRenderable(page, thingRenderable);
+ J3DPageRenderable pageRenderable = new J3DPageRenderable(page, thingRenderable, !offScreen);
thingRenderable.addPageRenderable(pageRenderable);
}
@@ -726,7 +726,7 @@
Page[] pages = thing.getPages();
for (int i = 0; i < pages.length; i++) {
- J3DPageRenderable pageRenderable = new J3DPageRenderable(pages[i], renderable);
+ J3DPageRenderable pageRenderable = new J3DPageRenderable(pages[i], renderable, !offScreen);
renderable.addPageRenderable(pageRenderable);
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java 2007-11-09 01:53:26 UTC (rev 567)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java 2007-11-10 23:19:14 UTC (rev 568)
@@ -68,23 +68,24 @@
this.baseImage = baseImage;
this.morphDeltaMaps = morphDeltaMaps;
this.bodyConfiguration = bodyConfiguration;
-
+
//I don't really care for any of these formats
// LUMINANCE is nice for a film noir effect
- texture = new TextureLoader(baseImage, "RGB5", TextureLoader.BY_REFERENCE, null).getTexture();
- texture.setCapability(Texture.ALLOW_IMAGE_READ);
- texture.getImage(0).setCapability(ImageComponent.ALLOW_SIZE_READ);
- texture.getImage(0).setCapability(ImageComponent.ALLOW_IMAGE_READ);
- texture.getImage(0).setCapability(ImageComponent.ALLOW_IMAGE_WRITE);
+ Appearance appearance = new Appearance();
+ if (baseImage != null) {
+ texture = new TextureLoader(baseImage, "RGB5", TextureLoader.BY_REFERENCE, null).getTexture();
+ texture.setCapability(Texture.ALLOW_IMAGE_READ);
+ texture.getImage(0).setCapability(ImageComponent.ALLOW_SIZE_READ);
+ texture.getImage(0).setCapability(ImageComponent.ALLOW_IMAGE_READ);
+ texture.getImage(0).setCapability(ImageComponent.ALLOW_IMAGE_WRITE);
+ updateTexture();
- updateTexture();
+ TextureAttributes textureAtts = new TextureAttributes();
+ textureAtts.setTextureMode(TextureAttributes.REPLACE);
+ appearance.setTextureAttributes(textureAtts);
+ appearance.setTexture(texture);
+ }
- Appearance appearance = new Appearance();
- TextureAttributes textureAtts = new TextureAttributes();
- textureAtts.setTextureMode(TextureAttributes.REPLACE);
- appearance.setTextureAttributes(textureAtts);
- appearance.setTexture(texture);
-
ColoringAttributes ca = new ColoringAttributes();
ca.setShadeModel(ColoringAttributes.NICEST);
appearance.setColoringAttributes(ca);
@@ -112,10 +113,10 @@
}
- public void setBaseImage(BufferedImage baseImage){
+ public void setBaseImage(BufferedImage baseImage) {
this.baseImage = baseImage;
}
-
+
public void updateTexture() {
if (baseImage == null) {
return;
@@ -127,7 +128,7 @@
public void setGeometry(Geometry geo) {
super.setGeometry(geo);
PickTool.setCapabilities(this, PickTool.INTERSECT_FULL);
-
+
skinMorphUpdater = new SkinMorphUpdater();
skinMorphUpdater.morph();
}
@@ -137,9 +138,9 @@
}
private class SkinMorphUpdater implements GeometryUpdater {
-
+
HashMap lastMorphValues = new HashMap();
-
+
float[] vertices = null;
SkinMorphUpdater() {
@@ -147,18 +148,18 @@
vertices = triArray.getCoordRefFloat();
}
- public void morph(){
+ public void morph() {
((GeometryArray) getGeometry()).updateData(this);
}
-
+
public void updateData(Geometry ignored) {
for (int i = 0; i < morphDeltaMaps.length; i++) {
float setting = bodyConfiguration.getSetting(morphDeltaMaps[i].getName());
if (lastMorphValues.get(morphDeltaMaps[i].getName()) != null) {
- setting -= ((Float)lastMorphValues.remove(morphDeltaMaps[i].getName())).floatValue();
+ setting -= ((Float) lastMorphValues.remove(morphDeltaMaps[i].getName())).floatValue();
}
lastMorphValues.put(morphDeltaMaps[i].getName(), new Float(bodyConfiguration.getSetting(morphDeltaMaps[i].getName())));
-
+
MorphDeltaMap.Range[] ranges = morphDeltaMaps[i].getRanges();
for (int r = 0; r < ranges.length; r++) {
Vector3f[] deltas = ranges[r].getDeltas();
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java 2007-11-09 01:53:26 UTC (rev 567)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java 2007-11-10 23:19:14 UTC (rev 568)
@@ -38,13 +38,17 @@
this.geometry = bodyData.cloneBodyGeometry();
this.morphDeltaMaps = bodyData.getMorphDeltaMaps();
if (customSkin == null) {
- if (bodyConfiguration.getBaseTextureName() == null) {
+ if (bodyConfiguration.getBaseTextureName() == null && bodyData.getDefaultBaseTexture() != null) {
this.baseImage = bodyData.getDefaultBaseTexture().getImage();
} else {
J3DBodyData.BaseTexture baseTexture = bodyData.getBaseTexture(bodyConfiguration.getBaseTextureName());
- if(baseTexture == null){
- System.err.println("Could not find base texture by name: " + bodyConfiguration.getBaseTextureName());
- this.baseImage = bodyData.getDefaultBaseTexture().getImage();
+ if (baseTexture == null) {
+ if (bodyConfiguration.getBaseTextureName() != null) {
+ System.err.println("Could not find base texture by name: " + bodyConfiguration.getBaseTextureName());
+ }
+ if (bodyData.getDefaultBaseTexture() != null) {
+ this.baseImage = bodyData.getDefaultBaseTexture().getImage();
+ }
} else {
this.baseImage = baseTexture.getImage();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ian...@us...> - 2007-11-09 01:53:23
|
Revision: 567
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=567&view=rev
Author: iansmith
Date: 2007-11-08 17:53:26 -0800 (Thu, 08 Nov 2007)
Log Message:
-----------
Fixed the stupid thing where URLs in the server.xml had to end in /.
Modified Paths:
--------------
maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
Modified: maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java
===================================================================
--- maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java 2007-11-09 00:10:49 UTC (rev 566)
+++ maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java 2007-11-09 01:53:26 UTC (rev 567)
@@ -76,6 +76,10 @@
initContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
baseUrl = (String) envCtx.lookup(OGOGLIO_BASE_URL_KEY);
+ if (!baseUrl.endsWith("/")) {
+ baseUrl=baseUrl+"/";
+ Log.warn(OGOGLIO_BASE_URL_KEY+" in server.xml should end in / but we're patching it:"+baseUrl);
+ }
}
}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java 2007-11-09 00:10:49 UTC (rev 566)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java 2007-11-09 01:53:26 UTC (rev 567)
@@ -64,6 +64,8 @@
import com.ogoglio.xml.server.DocumentFactory;
public class SimServlet extends OgoglioServletBase {
+ private static final String OGOGLIO_BASE_SIM_URL_KEY = "ogoglio/baseSimURL";
+
private static final String RELOAD_PARAMETER = "reload";
public static final String THING_SERVICE_PATH_ELEMENT = "service";
@@ -91,7 +93,12 @@
//don't bother with the sim if nobody wants it
if (servletNeeded) {
- simURI = new URI((String) envCtx.lookup("ogoglio/baseSimURL"));
+ String tmpSimUrl=(String) envCtx.lookup(OGOGLIO_BASE_SIM_URL_KEY);
+ if (!tmpSimUrl.endsWith("/")) {
+ tmpSimUrl=tmpSimUrl+"/";
+ Log.warn(OGOGLIO_BASE_SIM_URL_KEY+" in server.xml should end in / but we are patching it:"+tmpSimUrl);
+ }
+ simURI = new URI(tmpSimUrl);
SimRecord simRecord = SimPersistTasks.findSimsBySimURI(simURI, getSessionFactory());
if (simRecord != null) {
//error
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ian...@us...> - 2007-11-09 00:10:45
|
Revision: 566
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=566&view=rev
Author: iansmith
Date: 2007-11-08 16:10:49 -0800 (Thu, 08 Nov 2007)
Log Message:
-----------
Whew. It's in, comet support is now turned on. This should have no effect on coders or users, except that we can now pass quietly through firewalls.
Modified Paths:
--------------
maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java
maven/trunk/ogoglio-common/pom.xml
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIDescriptor.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/MeasPerfClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/Message.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPMessageReader.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProto.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoFactory.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/Locator.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketAsync.java
maven/trunk/ogoglio-integration-test/pom.xml
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncClientReady.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncProtoServerFactory.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/CometChannelManager.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/CometServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/MeasPerfServer.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/NetworkChannelServer.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/SimpleSocketAsyncServer.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SimMessageHandler.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/MessageProxy.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/WebappServletBase.java
maven/trunk/ogoglio-viewer-applet/src/main/java/com/ogoglio/viewer/applet/ViewerApplet.java
Added Paths:
-----------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/LineOrientedCRLFSocket.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/NegativeReadValueException.java
maven/trunk/ogoglio-integration-test/src/main/java/com/
maven/trunk/ogoglio-integration-test/src/main/java/com/ogoglio/
maven/trunk/ogoglio-integration-test/src/main/java/com/ogoglio/amazon/
maven/trunk/ogoglio-integration-test/src/main/java/com/ogoglio/amazon/test/
maven/trunk/ogoglio-integration-test/src/main/java/com/ogoglio/amazon/test/CometTest.java
maven/trunk/ogoglio-integration-test/src/main/scripts/
maven/trunk/ogoglio-integration-test/src/main/scripts/testComet
Removed Paths:
-------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoInfo.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometInfo.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketInfo.java
Modified: maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java
===================================================================
--- maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -224,7 +224,6 @@
String headerName = (String) headerNames.nextElement();
connection.setRequestProperty(headerName, request.getHeader(headerName));
}
-
if ("POST".equals(method)) {
connection.setDoOutput(true);
InputStream requestInput = request.getInputStream();
Modified: maven/trunk/ogoglio-common/pom.xml
===================================================================
--- maven/trunk/ogoglio-common/pom.xml 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/pom.xml 2007-11-09 00:10:49 UTC (rev 566)
@@ -50,6 +50,7 @@
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
+
</dependencies>
</project>
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -17,6 +17,8 @@
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Timer;
+import java.util.TimerTask;
import java.util.Vector;
import java.util.zip.ZipInputStream;
@@ -75,8 +77,12 @@
private boolean cleanedUp = false;
+ private static final long HEARTBEAT_INTERVAL=5000L;
+
private BodyDataProvider bodyDataProvider = new NetworkBodyDataProvider();
+ private Timer heartbeatTimer=null;
+
public SpaceClient(long spaceID, URI serviceURI, String authCookie, Listener listener) throws IOException {
ArgumentUtils.assertNotNegative(spaceID);
ArgumentUtils.assertNotNull(serviceURI);
@@ -105,8 +111,7 @@
space = new Space(this, spaceDoc.getSpaceID(), spaceDoc.getDisplayName(), spaceDoc.getOwnerUsername(), spaceDoc.getDisplaySea(), spaceDoc.getSeaLevel());
//create the event channel and start queuing events
- Object selector = AsyncProtoFactory.getDefaultInfo().getProxySpecificSelector();
- messageChannel = new TCPChannel(AsyncProtoFactory.getDefaultClient(serviceURI.getHost(), selector), messenger, true, new ChannelListener(), true);
+ messageChannel = new TCPChannel(AsyncProtoFactory.getDefaultClient(descriptor, true), messenger, true, new ChannelListener(), true, "space-client");
messenger.authenticate(authCookie);
long startWait = System.currentTimeMillis();
@@ -128,6 +133,11 @@
}
}
+ //this download can take longer than the timeout of our connection, so force heartbeats
+ //before we start doing all this
+ heartbeatTimer = new Timer("Heartbeat Client", true);
+ heartbeatTimer.schedule(new HeartbeatTimer(), 0L, HEARTBEAT_INTERVAL);
+
ThingDocument[] thingDocs = spaceDoc.getThingDocuments();
for (int i = 0; i < thingDocs.length; i++) {
Template template = space.getTemplate(thingDocs[i].getTemplateID());
@@ -684,6 +694,15 @@
messageChannel.cleanup();
waitingMessages.clear();
}
+
+ public void heartbeat() throws IOException {
+ Message message = new Message(messageChannel.getLocalLocator(), messageChannel.getRemoteLocator(), space.getSpaceID(), new PayloadFactory.HeartbeatPayload());
+ try {
+ messageChannel.sendMessage(message);
+ } catch (NoSuchDestinationException e) {
+ throw new IOException("Could not send heartbeat message");
+ }
+ }
}
private class ChannelListener implements TCPChannel.Listener {
@@ -732,7 +751,9 @@
messageChannel.sendMessage(new Message(messageChannel.getLocalLocator(), messageChannel.getRemoteLocator(), space.getSpaceID(), new PayloadFactory.LogoutPayload(accountDoc.getUsername())));
} catch (Exception e) {
}
-
+ if (heartbeatTimer!=null) { //there is a race condition at startup that makes this necessary
+ heartbeatTimer.cancel();
+ }
messenger.cleanup();
}
@@ -757,7 +778,7 @@
public ZipInputStream getBodyData(long bodyDataID) {
try {
- if(bodyDataID == -1){
+ if (bodyDataID == -1) {
return webClient.getBodyData(WebConstants.GUEST_BODY_FILE_NAME);
} else {
BodyDataDocument dataDoc = webClient.getBodyDataDocument(bodyDataID);
@@ -803,4 +824,14 @@
}
+ private class HeartbeatTimer extends TimerTask {
+ public void run() {
+ try {
+ messenger.heartbeat();
+ } catch (IOException e) {
+ Log.error("Unable to send heartbeat message, IOException:"+e.getMessage());
+ }
+ }
+ }
+
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIDescriptor.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIDescriptor.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIDescriptor.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -3,6 +3,8 @@
import java.io.IOException;
import java.net.URI;
+import com.ogoglio.message.proto.AsyncProto;
+import com.ogoglio.message.proto.AsyncProtoFactory;
import com.ogoglio.util.ArgumentUtils;
import com.ogoglio.util.WebConstants;
@@ -181,4 +183,20 @@
public URI getServiceStateURI() {
return WebAPIUtil.appendToURI(getSpacesURI(), "state/");
}
+
+ public URI getCometProxyURI() {
+ return WebAPIUtil.appendToURI(serviceURI, "comet/"+getCometProxyPath());
+ }
+
+ public URI getCometSimURI() {
+ return WebAPIUtil.appendToURI(serviceURI, "comet/"+getCometSimPath());
+ }
+
+ public String getCometProxyPath() {
+ return "proxy";
+ }
+
+ public String getCometSimPath() {
+ return "sim";
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/MeasPerfClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/MeasPerfClient.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/MeasPerfClient.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -39,7 +39,7 @@
try {
for (int i = 0; i < n; ++i) {
// AsyncProto proto=AsyncProtoFactory.getDefaultClient(argv[1], AsyncProtoFactory.getDefaultInfo().getSimSpecificSelector());
- AsyncProto proto=AsyncProtoFactory.getDefaultClient(argv[1], "/fart/poop");
+ AsyncProto proto=null;/*AsyncProtoFactory.getDefaultClient(argv[1], "/fart/poop");*/
Thread t =new MeasPerfClient(proto);
t.start();
try {
@@ -48,14 +48,14 @@
e.printStackTrace();
}
}
- } catch (IOException e) {
+ } catch (Exception e) {
e.printStackTrace();
}
}
public MeasPerfClient(AsyncProto proto) {
System.out.println("FOUND A CLIENT PROTO:"+(proto!=null));
- channel = new TCPChannel(proto,this,false,this,true);
+ channel = new TCPChannel(proto,this,false,this,true,"measure-perf-client");
}
public void run() {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/Message.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/Message.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/Message.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -21,7 +21,7 @@
public class Message {
- private static final String MESSAGE = "Message";
+ public static final String MESSAGE = "Message";
private static final String PROXY = "proxy";
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -39,7 +39,9 @@
}
}
- public void start() {
+ public void start(String debugInfo) {
+ senderThread.setName("sender-thread-"+debugInfo+"-"+senderThread.getId());
+ //Log.info("Launching thread "+senderThread.getName());
senderThread.start();
}
@@ -62,8 +64,7 @@
clientProto.sendMessage(command.toString(),messageString);
} catch (IOException e) {
if (!cleaned) {
- e.printStackTrace();
- throw new IllegalStateException("Error writing " + message);
+ throw new IllegalStateException("Error writing to client:" + message);
}
}
}
@@ -80,8 +81,8 @@
Message message = (Message) messageQueue.dequeue();
unsafeSendMessage(message);
} catch (Throwable e) {
- Log.error("Could not send message", e);
- break;
+ //Log.error("Could not send message [aborting thread:"+Thread.currentThread().getName()+"]:"+ e.getClass().getName()+":"+e.getMessage());
+ cleaned=true;
}
}
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -32,7 +32,7 @@
private SenderQueue senderQueue = null;
- //private MessageHandler messageHandler = null;
+ private MessageHandler messageHandler = null;
//private boolean cleaned = false;
@@ -41,7 +41,8 @@
private boolean ensureOrigin = false;
public TCPChannel(AsyncProto proto, MessageHandler message_handler, boolean ensureOrigin,
- Listener listener, boolean needAReaderThread) {
+ Listener listener, boolean needAReaderThread, String debugInfo) {
+
this.clientProto= proto;
//remoteHostName = clientProto.getRemoteAddress().getAddress().getHostAddress();
//remoteHostPort = clientProto.getRemoteAddress().getPort();
@@ -57,21 +58,21 @@
// TODO Don't spand two threads for each socket! No effing way!
senderQueue = new SenderQueue(clientProto, 1000); //TODO what should the max queue size be?
- senderQueue.start();
+ senderQueue.start(debugInfo);
//this is a wee bit hairy. all clients need a reader thread. servers need a reader
//thread depending on their protocol.
- Log.info("Comet got into a TCP channel:"+needAReaderThread);
if (needAReaderThread) {
readerThread = new TCPMessageReader(clientProto, message_handler, this);
+ readerThread.setName("tcp-reader-"+debugInfo+"-"+readerThread.getId());
+ //Log.info("Starting reader thread:"+readerThread.getName());
readerThread.start();
}
-
+ this.messageHandler=message_handler;
+
}
-
-
public void clientReady(AsyncProto newlyConnectedProto) {
Log.info("Client connected from: "+newlyConnectedProto.getRemoteLocator());
}
@@ -112,7 +113,7 @@
throw new NoSuchDestinationException("Passed a message to a TCPChannel with the wrong proxy: " + message.getProxy());
}
} else if (!message.getDestination().equals(clientProto.getRemoteLocator())){
- throw new NoSuchDestinationException("Passed a message to a TCPChannel with the wrong destination: " + message.getDestination());
+ throw new NoSuchDestinationException("Passed a message to a TCPChannel with the wrong destination: " + message.getDestination() + " but should be " + clientProto.getRemoteLocator());
}
try {
@@ -137,4 +138,7 @@
public boolean ensureOrigin() {
return ensureOrigin;
}
+ public MessageHandler getMessageHandler() {
+ return messageHandler;
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPMessageReader.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPMessageReader.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPMessageReader.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -17,6 +17,7 @@
import java.io.IOException;
import com.ogoglio.message.proto.AsyncProto;
+import com.ogoglio.message.proto.NegativeReadValueException;
import com.ogoglio.util.Log;
public class TCPMessageReader extends Thread {
@@ -71,39 +72,38 @@
public void run() {
try {
- Command command = new Command();
while (!cleaned) {
- String commandLine = clientProto.readLine();
- if (cleaned) {
- return;//somebody shut us down during our wait
+ String msg=clientProto.readLine();
+ if (msg!=null) {
+ //Log.info("TCP Message Reader:"+msg);
+ Message message = Message.parseMessage(msg);
+ if (channel.ensureOrigin()) {
+ message.setOrigin(clientProto.getRemoteLocator());
+ //message.getOrigin().setHost(remoteHostName);
+ //message.getOrigin().setPort(remotePort);
+ }
+ try {
+ messageHandler.handleMessage(message, channel);
+ } catch (Throwable e) {
+ Log.error("Error handling our message",e);
+ e.printStackTrace();
+ }
}
- if (commandLine==null) {
- channel.socketClosed(); //other side went bye-bye
- return;
- }
- command.reset(commandLine);
- String msg = clientProto.readString(command.getMessageLength());
- Message message = Message.parseMessage(msg);
- if (channel.ensureOrigin()) {
- message.setOrigin(clientProto.getRemoteLocator());
- //message.getOrigin().setHost(remoteHostName);
- //message.getOrigin().setPort(remotePort);
- }
- try {
- messageHandler.handleMessage(message, channel);
- } catch (Throwable e) {
- Log.error("Error handling message",e);
- e.printStackTrace();
- }
}
+ } catch (NegativeReadValueException e) {
+ //Log.info("Negative value from read, assuming server closed connection!");
+ channel.socketClosed();
+ cleaned=true;
} catch (Exception e) {
if (!cleaned) {
e.printStackTrace();
}
}
if (!cleaned) {
- Log.warn("Unclean client socket listener thread exiting");
+ Log.warn("Unclean client socket listener thread exiting:"+Thread.currentThread().getName());
channel.socketClosed();
+ } else {
+ //Log.info("Cleaned up and exiting TCPMessageReader thread:"+Thread.currentThread().getName());
}
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProto.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProto.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProto.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,7 +1,6 @@
package com.ogoglio.message.proto;
import java.io.IOException;
-import java.net.InetSocketAddress;
/**
* This class represents the notion of a protocol that can be sent over a socket. The
@@ -30,17 +29,9 @@
* Pump out a message with a given command header.
*/
public void sendMessage(String command, String message) throws IOException;
- /**
- * Read in a line terminated by CRLF. If the socket gets closed we return null. We return
- * "" if the line was empty. IOException means something really unexpected happened.
- */
+ //returns the next fully ready message or null
public String readLine() throws IOException;
/**
- * Read in a string that is known to be a given number of bytes. Again, we return null if
- * the socket closes but "" for a zero length string. IOException means something bad happened.
- */
- public String readString(int length) throws IOException;
- /**
* Insure that we are ready for writing to the output.It is required this be called before
* attempting to send.
* @throws IOException
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoFactory.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoFactory.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoFactory.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,7 +1,11 @@
package com.ogoglio.message.proto;
import java.io.IOException;
+import java.net.Socket;
+import java.net.URI;
+import com.ogoglio.client.WebAPIDescriptor;
+
/**
* This is a factory for other classes to get a handle on our async protocol handler and so
* we can "throw the switch" in exactly one place if we want to switch protocols.
@@ -11,49 +15,46 @@
*/
public class AsyncProtoFactory {
//this is the magic switch
- private static final boolean USE_SIMPLE_SOCKET=true;
+ private static final boolean USE_SIMPLE_SOCKET=false;
/**
* Get a handler for this protocol. This is the client side call. This fails if the connection
* cannot be made. It returns a connected proto object.
*
- * @param host
- * @param selector a proto-specific object
+ * @param host pass in a service descriptor (tells us how to find the server)
+ * @param boolean wantProxy true if you want the proxy server, false if you want the real sim server
* @return
* @throws IOException
*/
- public static AsyncProto getDefaultClient(String host, Object selector) throws IOException {
+ public static AsyncProto getDefaultClient(WebAPIDescriptor descriptor, boolean wantProxy) throws IOException {
if (USE_SIMPLE_SOCKET) {
- return simpleSocketProto(host, selector);
+ if (wantProxy) {
+ return simpleSocketProto(descriptor.getServiceStateURI().getHost(),SimpleSocketAsync.DEFAULT_PROXY_PORT);
+ } else {
+ return simpleSocketProto(descriptor.getServiceStateURI().getHost(),SimpleSocketAsync.DEFAULT_SIM_PORT);
+ }
} else {
- return cometProto(host,(String)selector);
+ if (wantProxy) {
+ return cometProto(descriptor.getCometProxyURI());
+ } else {
+ return cometProto(descriptor.getCometSimURI());
+ }
}
}
- private static AsyncProto cometProto(String host, String selector) throws IOException {
- return new CometClient(host,selector).getProto();
+ private static AsyncProto cometProto(URI cometURI) throws IOException {
+ //return new CometClient(host,selector).getProto();
+ return CometClient.getProto(cometURI);
}
- private static AsyncProto simpleSocketProto(String host, Object selector) throws IOException {
- if (USE_SIMPLE_SOCKET) {
- return simpleSocketInfo(host, selector);
- } else {
- return cometProto(host,(String)selector);
- }
+ private static AsyncProto simpleSocketProto(String host, int port) throws IOException {
+ return new SimpleSocketAsync(new Socket(host,port));
}
- private static AsyncProtoInfo cometInfo() {
- return new CometInfo();
- }
-
- private static AsyncProto simpleSocketInfo(String host, Object selector) throws IOException {
- return new SimpleSocketAsync(host, ((Integer)selector).intValue());
- }
-
- public static AsyncProtoInfo getDefaultInfo() {
+ public static String getScheme() {
if (USE_SIMPLE_SOCKET) {
- return new SimpleSocketInfo();
+ return "og";
} else {
- return new CometInfo();
+ return "comet";
}
}
}
Deleted: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoInfo.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoInfo.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/AsyncProtoInfo.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,15 +0,0 @@
-package com.ogoglio.message.proto;
-
-
-/**
- * The intention of this interface is to hide various specifics about how the underlying async
- * protocol is implemented. The objects returned here should be considered opaque.
- *
- * @author iansmith
- *
- */
-public interface AsyncProtoInfo {
- public String getScheme();
- public Object getProxySpecificSelector();
- public Object getSimSpecificSelector();
-}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,119 +1,141 @@
package com.ogoglio.message.proto;
-import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
import java.io.Writer;
-import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.URI;
-import com.ogoglio.message.MessageHandler;
-import com.ogoglio.message.TCPChannel.Listener;
+import com.ogoglio.message.Command;
+import com.ogoglio.util.Log;
public class CometClient {
- //comet works over HTTP
- private HttpURLConnection connection;
+ public static final int BAD_CMD = -210;
+ public static final int CMD_BUFFERED = -230;
+
+ private static final String EXPECTED_OK="HTTP/1.1 200";
- //most people just want to read/write to it
- public OutputStream os;
- public InputStream is;
+ public static final String CRLF="\r\n";
+ public static final String EOC = "0"+CRLF+CRLF; //end of chunk
- private static final String CRLF="\r\n";
- private static final String EOC = "0"+CRLF+CRLF; //end of chunk
+ public static final int COMET_BUFF_SIZE=512;
- public static final int XXX_PORT=8080;
- public static final String XXX_MOUNT_POINT="/og/comet";
+ //public static final int XXX_PORT=8080;
+ //public static final String XXX_MOUNT_POINT="/og/comet";
+ //public static final String XXX_HOST="localhost";
- private Locator remote;
- private Locator local;
-
- public CometClient(String remoteHost, String selector) throws IOException {
- Socket socket=new Socket(remoteHost,XXX_PORT); ///UGH
- is = socket.getInputStream();
- os = socket.getOutputStream();
+ public static CometProto getProto(URI uri) throws IOException {
+ Socket socket = new Socket();
+ int port=80;
+ if (uri.getPort()>0) {
+ port=uri.getPort();
+ }
+ SocketAddress address = new InetSocketAddress(uri.getHost(),port);
+ socket.connect(address,15000);
- StringBuffer buff=new StringBuffer();
- buff.append("POST "+XXX_MOUNT_POINT+selector+" HTTP/1.1"+CRLF);
- buff.append("content-type: text/plain"+CRLF);
- buff.append("host: "+remoteHost+":"+XXX_PORT+CRLF);
- buff.append("connection: keep-alive"+CRLF);
- buff.append("user-agent: ogoglio/viewer"+CRLF);
- //if you omit this, the server generates the "end" immediately
- buff.append("content-length: 17"+CRLF);
- //buff.append("accept= text/plain"+CRLF);
- buff.append("method: POST"+CRLF);
- //buff.append("transfer-encoding= chunked"+CRLF);
- buff.append(CRLF);
- os.write(buff.toString().getBytes());
- os.flush();
-
- String scheme = new CometInfo().getScheme();
- remote = new Locator(scheme+"://"+remoteHost+":"+XXX_PORT+XXX_MOUNT_POINT+selector);
+ InputStream is=socket.getInputStream();
+ OutputStream os=socket.getOutputStream();
+ Writer writer=new OutputStreamWriter(os);
+
+ sendHTTPStartupInfo(writer, uri.getHost(), uri.getPath());
+ String response=getHTTPResponse(is);
+ if (!response.startsWith(EXPECTED_OK)) {
+ throw new IOException("Problem connecting to server. HTTP Response:"+response);
+ }
+ if (!response.endsWith("\r\n\r\n")) {
+ throw new IOException("Problem connecting to server, no empty line! HTTP Response:"+response);
+ }
+ String scheme=AsyncProtoFactory.getScheme(),localStr,remoteStr;
InetSocketAddress addr=(InetSocketAddress)socket.getLocalSocketAddress();
- local = new Locator(scheme+"://UNKNOWN@"+addr.getHostName()+":"+addr.getPort()+"/");
+
+ localStr = scheme+"://UNKNOWN@"+addr.getHostName()+":"+addr.getPort()+"/";
+ remoteStr = scheme+"://"+uri.getHost()+":"+uri.getPort()+uri.getPath();
+
+ Locator remote=new Locator(remoteStr);
+ Locator local=new Locator(localStr);
+ return new CometProto(writer,is,remote,local,true);
}
+
+ private static void sendHTTPStartupInfo(Writer wr, String host, String path) throws IOException {
+ sendLine("POST "+path+" HTTP/1.1", wr);
+ sendLine("Host: "+host, wr);
+ sendLine("Transfer-encoding: chunked",wr);
+ sendLine("",wr);
+ wr.flush();
+ }
+
+ private static String getHTTPResponse(InputStream is) throws IOException {
+ byte[] buffer=new byte[1024];
+ int n=is.read(buffer);
+ if (n>0) {
+ String s=new String(buffer,0,n);
+ return s;
+ }
+ throw new IOException("getHTTPResponse at setup failed ("+n+")");
+ }
- public CometProto getProto() {
- return new CometProto(new PrintWriter(os), is, remote, local);
+ private static void sendLine(String string, Writer wr) throws IOException {
+ String withCR=string+CRLF;
+ wr.write(withCR);
}
- public CometClient(String remoteHost, int remotePort, MessageHandler messageHandler, boolean ensureOrigin, Listener listener) throws IOException {
- Socket socket=new Socket(remoteHost,remotePort);
- is = socket.getInputStream();
- os = socket.getOutputStream();
-
- StringBuffer buff=new StringBuffer();
- buff.append("POST /og/comet/fart/poop HTTP/1.1"+CRLF);
- buff.append("content-type: text/plain"+CRLF);
- buff.append("host: "+remoteHost+":"+remotePort+CRLF);
- buff.append("connection: keep-alive"+CRLF);
- buff.append("user-agent: ogoglio/viewer"+CRLF);
- //if you omit this, the server generates the "end" immediately
- buff.append("content-length: 17"+CRLF);
- //buff.append("accept= text/plain"+CRLF);
- buff.append("method: POST"+CRLF);
- //buff.append("transfer-encoding= chunked"+CRLF);
- buff.append(CRLF);
- os.write(buff.toString().getBytes());
- os.flush();
-
+ public static void sendLineChunked(String string, Writer wr) throws IOException {
+ sendLine(Integer.toHexString(string.length()),wr);
+ sendLine(string,wr);
+ wr.flush();
}
-
-
- public static void main(String[] argv) {
+
+ public static String pullOutNextMessage(StringBuffer buff) {
+ //if you have no "$" then you are right at the front
+ if (buff.indexOf("$")==-1) {
+ Log.info("Unusual buffer situation, no $ found yet out of "+buff.length()+" chars...");
+ return null;
+ }
+ int result = CometClient.pullOutCommandPart(buff);
+ if (result== CometClient.BAD_CMD) {
+ return null;
+ }
+ if (result== CometClient.CMD_BUFFERED) {
+ //Log.info("Buffered partial packet of "+buff.length()+" chars...");
+ return null;
+ }
+ //the result is the size of the substring we want
+ String msg=buff.substring(0,result);
+ buff.delete(0, result);
+ return msg;
+ }
+
+ public static int pullOutCommandPart(StringBuffer buff) {
+ String command=buff.substring(0,buff.indexOf("$"));
+ String msg=buff.substring(buff.indexOf("$")+1);
+ String lenPart=command.substring(Command.MESSAGE.length()+1);
+ int len=-1;
try {
- CometClient client=new CometClient("localhost",8080,null,false,null);
- OutputStreamWriter wr=new OutputStreamWriter(client.os);
- PrintWriter pr=new PrintWriter(wr);
- StringBuffer data=new StringBuffer();
- data.append(argv[0]+":"+argv[1]+"\n");
-
- pr.print(data.toString());
- pr.flush();
-
-
- InputStreamReader isr=new InputStreamReader(client.is);
- BufferedReader rd=new BufferedReader(isr);
- String line=null;
- do {
- line=rd.readLine();
- if (line!=null) {
- System.out.println("<--:"+line);
+ len=Integer.parseInt(lenPart);
+ if (len<=msg.length()) {
+ int dollarIndex=buff.indexOf("$");
+ //we actually don't want it if the $ is the last one because then we have no msg
+ if (dollarIndex+1==buff.length()) {
+ return CMD_BUFFERED;
}
- } while (rd!=null);
-
- } catch (IOException e) {
- System.out.println("WHOA! IO EXCEPTION");
- e.printStackTrace();
+ //we have a whole msg of length len... so strip out command part
+ buff.delete(0, dollarIndex+1);
+ return len;
+ }
+ return CMD_BUFFERED;
+ } catch (NumberFormatException e) {
+ Log.error("Command isn't well formed!"+buff+"["+lenPart+"]...destroying buffer!");
+ buff.delete(0, buff.length());
+ return BAD_CMD;
}
+
}
+}
-}
Deleted: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometInfo.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometInfo.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometInfo.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,21 +0,0 @@
-package com.ogoglio.message.proto;
-
-
-public class CometInfo implements AsyncProtoInfo {
-
- public CometInfo() {
- }
-
- public Object getProxySpecificSelector() {
- return "/proxy";
- }
-
- public String getScheme() {
- return "comet";
- }
-
- public Object getSimSpecificSelector() {
- return "/sim";
- }
-
-}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -8,19 +8,19 @@
public class CometProto implements AsyncProto {
private Writer writer;
- private InputStream input;
+ private LineOrientedCRLFSocket input;
private Locator local;
private Locator remote;
-
- private StringBuffer waiting=new StringBuffer();
+ private boolean needsChunking;
+ StringBuffer buffer=new StringBuffer();
- public CometProto(Writer writer, InputStream input, Locator remote, Locator local) {
+ public CometProto(Writer writer, InputStream input, Locator remote, Locator local, boolean needsChunking) {
this.writer=writer;
- this.input=input;
+ this.input=new LineOrientedCRLFSocket(input);
this.local=local;
this.remote=remote;
+ this.needsChunking=needsChunking;
}
-
public Locator getLocalLocator() {
return local;
}
@@ -38,51 +38,67 @@
}
public String readLine() throws IOException {
- byte[] buf = new byte[512];
- waiting.delete(0, waiting.length());
- do {
- int n = input.read(buf); //can throw an IOException
- if (n > 0) {
- waiting.append(new String(buf, 0, n));
- } else if (n < 0) {
- Log.error("Unable to read from stream! Error: read returned < 0:"+n);
- throw new IOException("Can't read from stream [<0 in read()]");
- }
- } while (input.available() >0);
+ if (input==null) {
+ throw new IOException("Can't read on a stream that is already closed [readLine].");
+ }
+ String chunkLine=input.waitForNextLine();
+ String dataLine=input.waitForNextLine();
- if (waiting.indexOf("\n")!=waiting.length()) {
- Log.error("Did not get a single string terminated by a newline!");
+ if (chunkLine.equals("0")) {
+ throw new NegativeReadValueException("Read EOC from server! Closing!");
}
- return waiting.toString();
- }
-
- public String readString(int length) throws IOException {
- byte[] buf = new byte[512];
- waiting.delete(0, waiting.length());
- do {
- int n = input.read(buf); //can throw an IOException
- if (n > 0) {
- waiting.append(new String(buf,0,n));
- } else if (n < 0) {
- Log.error("Unable to read from stream! Error: read returned < 0:"+n);
- throw new IOException("Can't read from stream [<0 in read()]");
+
+ try {
+ int len=Integer.parseInt(chunkLine,16);
+ if (len!=dataLine.length()) {
+ Log.error("Whoa! Chunk wasn't the size we expected:"+chunkLine+"->"+dataLine);
}
- } while (waiting.length()<length);
- return waiting.toString();
+ } catch (NumberFormatException e) {
+ Log.error("Whoa! Chunk line wasn't well formed:"+chunkLine);
+ }
+
+ buffer.append(dataLine);
+ return CometClient.pullOutNextMessage(buffer);
}
+/* public String readString(int length) throws IOException {
+ throw new IOException("Not implemented for this protocol");
+ if (input==null) {
+ throw new IOException("Can't read on a stream that is already closed [readString].");
+ }
+ String next=input.waitForNextLine();
+ if (next.length()!=length) {
+ throw new IOException("We are out of sync with the protocol!");
+ }
+ return next;
+
+ }*/
+
public void sendMessage(String command, String message) throws IOException {
- writer.write(command + "\n");
- writer.write(message);
+ String bunch=command+"$"+message;
+ if (writer==null) {
+ throw new IOException("Can't write on a stream that is already closed [sendMessage].");
+ }
+ if (needsChunking) {
+ CometClient.sendLineChunked(bunch, writer);
+ } else {
+ //this is evil breaking of modularity! b/c we know that tomcat doesn't synchronize
+ //access to the writer, we do it here, way down the stack and without real justification or API
+ synchronized (writer) {
+ writer.write(bunch);
+ writer.flush();
+ }
+ }
}
-
+
public void shutdown() {
- try {
- input.close();
- writer.close();
- } catch (IOException e) {
- Log.error("Error closing input/output streams of comet!",e);
- }
+ //this isn't really what we'd like to do, but we would need a bunch of machinery to know
+ //if it was safe to call "close" b/c that would break the comet servlet which reuses
+ //these objects... the client side probably *should* call close.
+
+ //how should we synchronize this?
+ input=null;
+ writer=null;
}
}
Added: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/LineOrientedCRLFSocket.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/LineOrientedCRLFSocket.java (rev 0)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/LineOrientedCRLFSocket.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -0,0 +1,46 @@
+package com.ogoglio.message.proto;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.ogoglio.util.Log;
+
+public class LineOrientedCRLFSocket {
+
+ private InputStream is;
+ private StringBuffer buffer=new StringBuffer();
+
+ public LineOrientedCRLFSocket(InputStream is) {
+ this.is=is;
+ }
+
+ public String waitForNextLine() throws IOException {
+ int index;
+ while ((index=buffer.indexOf(CometClient.CRLF))==-1) {
+ //no full line in buffer
+ fill();
+ }
+ String front=buffer.substring(0, index); //drop the \r\n terminator
+ buffer.delete(0, index+2);
+
+ return front;
+ }
+
+ public void fill() throws IOException {
+ byte buf[]=new byte[CometClient.COMET_BUFF_SIZE];
+ int n = is.read(buf);
+ if (n<0) {
+ is.close();
+ is=null;
+ throw new NegativeReadValueException("Negative value reading from socket! [n="+n+"]");
+ }
+ buffer.append(new String(buf,0,n));
+ //Log.info("LineOriented [client] read "+n+" bytes:"+buffer);
+ }
+
+ public void close() throws IOException {
+ if (is!=null) {
+ is.close();
+ }
+ }
+}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/Locator.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/Locator.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/Locator.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -14,14 +14,14 @@
package com.ogoglio.message.proto;
+import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;
+import java.net.UnknownHostException;
public class Locator {
- public static final AsyncProtoInfo info = AsyncProtoFactory.getDefaultInfo();
-
private URI uri = null;
public Locator(String locatorString) {
@@ -30,41 +30,35 @@
} catch (URISyntaxException e) {
throw new IllegalArgumentException("Bad locatorString: " + locatorString);
}
- if (uri.getPort() <= 0) {
+ int port = 80;
+ if (uri.getPort() < -1) { //-1 is legal and implies 80
throw new IllegalArgumentException("bad port: " + uri.getPort());
+ } else if (uri.getPort() > 0){
+ port = uri.getPort();
}
- if (!info.getScheme().equals(uri.getScheme())) {
+ if (!AsyncProtoFactory.getScheme().equals(uri.getScheme())) {
throw new IllegalArgumentException("bad scheme: " + uri.getScheme());
}
- }
-
- public String getHost() {
- return uri.getHost();
- }
-
- /*
- public void setPort(int port) {
- String newURI = uri.getScheme() + "://" + uri.getHost() + ":" + port + "/";
+ /*
+ * These have to be normalized to IP addresses if they are going to be useful.
+ */
try {
- uri = new URI(newURI);
+ String hostAsName=uri.getHost();
+ InetAddress addr=InetAddress.getByName(hostAsName);
+ String hostAsNumber=addr.getHostAddress();
+ uri = new URI(uri.getScheme(),uri.getUserInfo(),hostAsNumber,port,uri.getPath(),uri.getQuery(),uri.getFragment());
+ } catch (UnknownHostException ex) {
+ throw new IllegalArgumentException("Hostname supplied in locator is bogus:"+uri.getHost());
} catch (URISyntaxException e) {
- throw new IllegalStateException("Bad uri: " + newURI);
+ throw new IllegalArgumentException("Bad locatorString when we tried to normalize! " + locatorString);
}
+
}
- public void setHost(String host) {
- if (host == null || host.trim().length() == 0) {
- throw new IllegalArgumentException("Bad host name: " + host);
- }
- String newURI = uri.getScheme() + "://" + host + ":" + uri.getPort() + "/";
- try {
- uri = new URI(newURI);
- } catch (URISyntaxException e) {
- throw new IllegalStateException("Bad uri: " + newURI);
- }
-
+ public String getHost() {
+ return uri.getHost();
}
- */
+
public int getPort() {
return uri.getPort();
}
Added: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/NegativeReadValueException.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/NegativeReadValueException.java (rev 0)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/NegativeReadValueException.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -0,0 +1,10 @@
+package com.ogoglio.message.proto;
+
+import java.io.IOException;
+
+
+public class NegativeReadValueException extends IOException {
+ public NegativeReadValueException(String msg) {
+ super(msg);
+ }
+}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketAsync.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketAsync.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketAsync.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -18,6 +18,10 @@
*/
public class SimpleSocketAsync implements AsyncProto {
+ public static final int DEFAULT_PROXY_PORT = 49355;
+
+ public static final int DEFAULT_SIM_PORT = 8922;
+
public static int MAX_COMMAND_LENGTH = 2048; //TODO decide whether 2048 bytes is enough for a max command length
public static int MAX_MESSAGE_LENGTH = 2048; //TODO decide whether 2048 bytes is enough for a max message length
@@ -31,10 +35,6 @@
private StringBuffer commandBuffer = new StringBuffer();
private StringBuffer messageBuffer = new StringBuffer();
-
- public SimpleSocketAsync(String host, int port) throws IOException {
- this(new Socket(host, port));
- }
public SimpleSocketAsync(Socket socket) {
this.socket=socket;
@@ -51,7 +51,7 @@
}
private Locator sockAddrToScheme(InetSocketAddress addr) {
- String scheme = AsyncProtoFactory.getDefaultInfo().getScheme();
+ String scheme = AsyncProtoFactory.getScheme();
return new Locator(scheme +"://"+addr.getHostName()+":"+addr.getPort());
}
@@ -99,7 +99,7 @@
commandBuffer.delete(0, commandBuffer.length());
return result;
}
-
+/*
public String readString(int length) throws IOException {
int ct = 0;
while (ct < length) {
@@ -118,7 +118,7 @@
messageBuffer.delete(0, messageBuffer.length());
return result;
}
-
+*/
public void prepareOutput() throws IOException {
if (socketOutput == null) {
socketOutput = socket.getOutputStream();
Deleted: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketInfo.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketInfo.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/SimpleSocketInfo.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,26 +0,0 @@
-package com.ogoglio.message.proto;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-
-public class SimpleSocketInfo implements AsyncProtoInfo {
-
- private static final int DEFAULT_SIM_PORT=8932;
- private static final int DEFAULT_PROXY_PORT=43092;
-
- private static final String SCHEME = "og";
-
- public Object getProxySpecificSelector() {
- return new Integer(DEFAULT_PROXY_PORT);
- }
-
- public String getScheme() {
- return SCHEME;
- }
-
- public Object getSimSpecificSelector() {
- return new Integer(DEFAULT_SIM_PORT);
- }
-
-}
Modified: maven/trunk/ogoglio-integration-test/pom.xml
===================================================================
--- maven/trunk/ogoglio-integration-test/pom.xml 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-integration-test/pom.xml 2007-11-09 00:10:49 UTC (rev 566)
@@ -13,7 +13,7 @@
<relativePath>../ogoglio</relativePath>
</parent>
<artifactId>ogoglio-integration-test</artifactId>
- <packaging>pom</packaging>
+ <packaging>jar</packaging>
<build>
<testResources>
@@ -62,35 +62,6 @@
<skip>true</skip><!--skip unit tests -->
</configuration>
</plugin>
- <!--need to compile b/c POM packaging doesn't get it by def -->
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <executions>
- <execution>
- <id>build integration tests</id>
- <phase>test-compile</phase>
- <goals>
- <goal>testCompile</goal>
- </goals>
- </execution>
- </executions>
- <configuration />
- </plugin>
- <!--need to do resources b/c POM packaging doesn't get them by def -->
- <plugin>
- <artifactId>maven-resources-plugin</artifactId>
- <executions>
- <execution>
- <id>build integration tests</id>
- <phase>process-test-resources</phase>
- <goals>
- <goal>testResources</goal>
- </goals>
- </execution>
- </executions>
- <configuration />
- </plugin>
-
</plugins>
</build>
Added: maven/trunk/ogoglio-integration-test/src/main/java/com/ogoglio/amazon/test/CometTest.java
===================================================================
--- maven/trunk/ogoglio-integration-test/src/main/java/com/ogoglio/amazon/test/CometTest.java (rev 0)
+++ maven/trunk/ogoglio-integration-test/src/main/java/com/ogoglio/amazon/test/CometTest.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -0,0 +1,104 @@
+package com.ogoglio.amazon.test;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Vector;
+
+import com.ogoglio.client.SpaceClient;
+import com.ogoglio.client.WebAPIAuthenticator;
+import com.ogoglio.client.WebAPIClient;
+import com.ogoglio.client.WebAPIClientWire;
+import com.ogoglio.client.WebAPIDescriptor;
+import com.ogoglio.client.model.Thing;
+import com.ogoglio.xml.SpaceDocument;
+
+public class CometTest implements SpaceClient.Listener{
+
+ private String host;
+ private String user;
+ private String password;
+
+ public CometTest(String host, String user, String password) {
+ this.host=host;
+ this.user=user;
+ this.password=password;
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ if (args.length!=3) {
+ usage();
+ }
+ try {
+ CometTest test=new CometTest(args[0],args[1],args[2]);
+ test.start();
+ } catch (URISyntaxException e) {
+ System.err.println("Couldn't form a URI from the given host:"+e.getMessage());
+ } catch (IOException e) {
+ System.err.println("IOException :"+e.getMessage());
+ e.printStackTrace();
+ }
+ }
+
+ private static void usage() {
+ System.err.println("usage: AmazonCometTest ec2-67-202-23-0.compute-1.amazonaws.com user password");
+ System.exit(1);
+ }
+
+ private void start() throws URISyntaxException, IOException {
+ WebAPIDescriptor descriptor = new WebAPIDescriptor(new URI("http://"+host+":80/og/"));
+ WebAPIClientWire wire=new WebAPIClientWire();
+ WebAPIAuthenticator auth = new WebAPIAuthenticator(wire,descriptor,user,password);
+ WebAPIClient webclient = new WebAPIClient(descriptor,auth,wire);
+
+ SpaceDocument space=webclient.createSpace("testing remote access");
+ long spaceID=space.getSpaceID();
+ System.out.println("Last changed ["+space.getDisplayName()+"]:"+space.getLastModifiedAsUTC());
+ //make a space for us to play in
+ webclient.setSpacePublished(spaceID, true);
+
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ }
+
+ SpaceClient client=new SpaceClient(spaceID,descriptor.getServiceURI(),auth.getAuthCookie(),this);
+ System.out.println("Got a connected client!");
+ webclient.deleteSpace(spaceID);
+ }
+
+ public void contextItemChosen(Thing thing, long nonce, String id) {
+ }
+
+ public void disconnected() {
+ System.out.println("Disconnected from space");
+ }
+
+ public void receivedBrowserMessage(long sourceThingID, String message) {
+ }
+
+ public void receivedChatMessage(String username, String message) {
+ }
+
+ public void receivedCommandFocusRequest() {
+ }
+
+ public void receivedContextMenuData(long nonce, String errorIfAny, Vector contextMenu) {
+ }
+
+ public void receivedContextMenuRequest(Thing thing, String shapeName, int x, int y, long nonce) {
+ }
+
+ public void receivedInfoPanel(long sourceThingID, String nonce) {
+ }
+
+ public void receivedLink(String displayName, String link) {
+ }
+
+ public void receivedSpaceTransfer(URI link) {
+ }
+
+}
Added: maven/trunk/ogoglio-integration-test/src/main/scripts/testComet
===================================================================
--- maven/trunk/ogoglio-integration-test/src/main/scripts/testComet (rev 0)
+++ maven/trunk/ogoglio-integration-test/src/main/scripts/testComet 2007-11-09 00:10:49 UTC (rev 566)
@@ -0,0 +1,2 @@
+#!/bin/bash
+java -cp ../../../target/classes\:$HOME/.m2/repository/com/ogoglio/ogoglio-common/0.0.1-SNAPSHOT/ogoglio-common-0.0.1-SNAPSHOT.jar com.ogoglio.amazon.test.CometTest $1 $2 $3
Property changes on: maven/trunk/ogoglio-integration-test/src/main/scripts/testComet
___________________________________________________________________
Name: svn:executable
+ *
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncClientReady.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncClientReady.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncClientReady.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,5 +1,6 @@
package com.ogoglio.message.server;
+import com.ogoglio.message.TCPChannel;
import com.ogoglio.message.proto.AsyncProto;
/**
@@ -14,5 +15,5 @@
*/
public interface AsyncClientReady {
- public void clientReady(AsyncProto newlyConnectedProto);
+ public TCPChannel clientReady(AsyncProto newlyConnectedProto);
}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncProtoServerFactory.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncProtoServerFactory.java 2007-11-08 00:25:45 UTC (rev 565)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/message/server/AsyncProtoServerFactory.java 2007-11-09 00:10:49 UTC (rev 566)
@@ -1,20 +1,15 @@
package com.ogoglio.message.server;
import java.io.IOException;
+import java.net.URI;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import com.ogoglio.message.MessageHandler;
-import com.ogoglio.message.proto.AsyncProtoInfo;
-import com.ogoglio.message.proto.CometInfo;
-import com.ogoglio.message.proto.SimpleSocketInfo;
-import com.ogoglio.util.Log;
-
public class AsyncProtoServerFactory {
//this is the magic switch
- private static final boolean USE_SIMPLE_SOCKET=true;
+ private static final boolean USE_SIMPLE_SOCKET=false;
private static Map selectorToChannelManager = Collections.synchronizedMap(new HashMap());
/**
@@ -28,57 +23,27 @@
*/
public static AsyncProtoShutdownHandle waitForClient(Object serverSelector, AsyncClientReady ready) throws IOException {
if (USE_SIMPLE_SOCKET) {
- return simpleSocketImpl(((Integer)serverSelector).intValue(),ready);
+ throw new IllegalArgumentException("Currently unavailable protocol!");
+ //return simpleSocketImpl(((Integer)serverSelector).intValue(),ready);
} else {
return cometImpl(serverSelector, ready);
}
}
- public static AsyncProtoInfo getInfo() {
- if (USE_SIMPLE_SOCKET) {
- return simpleSocketInfo();
- } else {
- return cometInfo();
- }
- }
-
- private static AsyncProtoInfo simpleSocketInfo() {
- return new SimpleSocketInfo();
- }
-
private static AsyncProtoShutdownHandle simpleSocketImpl(int port, AsyncClientReady ready) throws IOException {
SimpleSocketWaiterThread waiter = new SimpleSocketWaiterThread(port,ready);
waiter.start();
return waiter.getShutdownHandle();
}
- private static AsyncProtoInfo cometInfo() {
- return new CometInfo();
- }
-
private static AsyncProtoShutdownHandle cometImpl(Object serverSelector, AsyncClientReady ready) {
- String urlPart = (String)serverSelector;
- CometChannelManager mgr = new CometChannelManager(urlPart,ready);
+ URI uri= (URI)serverSelector;
+ CometChannelManager mgr = new CometChannelManager(uri,ready);
selectorToChannelManager.put(serverSelector, mgr);
return mgr;
}
public static boolean needsReaderThreadsOnServerSide() {
return USE_SIMPLE_SOCKET;
- }
-
- public static void registerMessageHandler(Object serverSelector, MessageHandler messageHandler) {
- if (USE_SIMPLE_SOCKET) {
- Log.error("S...
[truncated message content] |
|
From: <tre...@us...> - 2007-11-08 00:25:41
|
Revision: 565
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=565&view=rev
Author: trevorolio
Date: 2007-11-07 16:25:45 -0800 (Wed, 07 Nov 2007)
Log Message:
-----------
Added account level field to auth docs.
Modified Paths:
--------------
maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java
Modified: maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java
===================================================================
--- maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java 2007-11-08 00:25:42 UTC (rev 564)
+++ maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java 2007-11-08 00:25:45 UTC (rev 565)
@@ -44,9 +44,9 @@
mockWire = (WebAPIClientWire) mock_ignoreEqualsAndToString(WebAPIClientWire.class);
mockAuthFactory = (WebAPIAuthenticatorFactory) mock_ignoreEqualsAndToString(WebAPIAuthenticatorFactory.class);
- notAuthedAuthDoc = new AuthDocument("Ian", false);
+ notAuthedAuthDoc = new AuthDocument("Ian", false, AccountDocument.ACCOUNT_LEVEL_BASIC);
- authedAuthDoc = new AuthDocument("Ian", true);
+ authedAuthDoc = new AuthDocument("Ian", true, AccountDocument.ACCOUNT_LEVEL_BASIC);
accountDoc = new AccountDocument(authedAuthDoc.getUsername(), AccountDocument.ACCOUNT_LEVEL_ADVANCED, null, null, null, null, null, AccountDocument.NO_TIME_VALUE, null, AccountDocument.NO_TIME_VALUE, 1);
} catch (URISyntaxException e) {
fail("Bad URIL: " + e);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-08 00:25:38
|
Revision: 564
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=564&view=rev
Author: trevorolio
Date: 2007-11-07 16:25:42 -0800 (Wed, 07 Nov 2007)
Log Message:
-----------
Added account level field to auth docs.
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AuthServlet.java
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AuthServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AuthServlet.java 2007-11-08 00:25:38 UTC (rev 563)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AuthServlet.java 2007-11-08 00:25:42 UTC (rev 564)
@@ -135,7 +135,7 @@
} else {
AuthDocument authDoc = null;
if (cookieAccountRecord != null) {
- authDoc = new AuthDocument(cookieAccountRecord.getUsername(), true);
+ authDoc = new AuthDocument(cookieAccountRecord.getUsername(), true, cookieAccountRecord.getAccountlevel());
} else {
authDoc = new AuthDocument();
}
@@ -161,7 +161,7 @@
newCookie.setPath("/");
newCookie.setMaxAge(Integer.MAX_VALUE - 1);
response.addCookie(newCookie);
- AuthDocument authDoc = new AuthDocument(authedAccountRecord.getUsername(), true);
+ AuthDocument authDoc = new AuthDocument(authedAccountRecord.getUsername(), true, authedAccountRecord.getAccountlevel());
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("text/xml");
response.getOutputStream().write(authDoc.toString().getBytes());
@@ -178,7 +178,7 @@
AccountRecord cookieAccountRecord = getAuthedAccountRecord(request, getSessionFactory());
AuthDocument authDoc = null;
if (cookieAccountRecord != null) {
- authDoc = new AuthDocument(cookieAccountRecord.getUsername(), true);
+ authDoc = new AuthDocument(cookieAccountRecord.getUsername(), true, cookieAccountRecord.getAccountlevel());
} else {
authDoc = new AuthDocument();
}
@@ -205,7 +205,7 @@
AccountRecord cookieAccountRecord = getAuthedAccountRecord(request, getSessionFactory());
AuthDocument authDoc = null;
if (cookieAccountRecord != null) {
- authDoc = new AuthDocument(cookieAccountRecord.getUsername(), true);
+ authDoc = new AuthDocument(cookieAccountRecord.getUsername(), true, cookieAccountRecord.getAccountlevel());
} else {
authDoc = new AuthDocument();
}
Modified: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js 2007-11-08 00:25:38 UTC (rev 563)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js 2007-11-08 00:25:42 UTC (rev 564)
@@ -262,6 +262,10 @@
return xml.replace(/'/g,"'").replace(/"/g,"\"").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&");
};
+function newlinesToBrs(text){
+ return text.replace(/\n/g,"<br/>");
+}
+
// BEGIN QUATERION CLASS
function Quaternion(wValue, xValue, yValue, zValue){
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-08 00:25:34
|
Revision: 563
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=563&view=rev
Author: trevorolio
Date: 2007-11-07 16:25:38 -0800 (Wed, 07 Nov 2007)
Log Message:
-----------
Added account level field to auth docs.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIGuestAuthenticator.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AuthDocument.java
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIGuestAuthenticator.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIGuestAuthenticator.java 2007-11-07 21:06:54 UTC (rev 562)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIGuestAuthenticator.java 2007-11-08 00:25:38 UTC (rev 563)
@@ -12,7 +12,7 @@
public WebAPIGuestAuthenticator(WebAPIDescriptor serviceDescriptor, String authCookie) {
super(serviceDescriptor, authCookie);
- authDoc = new AuthDocument(authCookie, true);
+ authDoc = new AuthDocument(authCookie, true, AccountDocument.ACCOUNT_LEVEL_BASIC);
accountDoc = new AccountDocument(authCookie);
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AuthDocument.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AuthDocument.java 2007-11-07 21:06:54 UTC (rev 562)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AuthDocument.java 2007-11-08 00:25:38 UTC (rev 563)
@@ -23,14 +23,16 @@
public static final String AUTHENTICATED = "authenticated";
+ public static final String ACCOUNT_LEVEL = "accountlevel";
+
XMLElement data = null;
public AuthDocument() {
- this.data = create(null, false);
+ this.data = create(null, false, AccountDocument.ACCOUNT_LEVEL_BASIC);
}
- public AuthDocument(String username, boolean authenticated) {
- this.data = create(username, authenticated);
+ public AuthDocument(String username, boolean authenticated, String accountLevel) {
+ this.data = create(username, authenticated, accountLevel);
}
public AuthDocument(XMLElement data) {
@@ -46,12 +48,13 @@
this.data = data;
}
- private XMLElement create(String username, boolean authenticated) {
+ private XMLElement create(String username, boolean authenticated, String accountLevel) {
XMLElement element = new XMLElement(NAME);
if(username != null) {
element.setAttribute(USERNAME, username);
}
element.setAttribute(AUTHENTICATED, authenticated);
+ element.setAttribute(ACCOUNT_LEVEL, accountLevel);
return element;
}
@@ -71,4 +74,8 @@
return data.getStringAttribute(USERNAME);
}
+ public String getAccountLevel(){
+ return data.getStringAttribute(ACCOUNT_LEVEL);
+ }
+
}
\ No newline at end of file
Modified: maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java
===================================================================
--- maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java 2007-11-07 21:06:54 UTC (rev 562)
+++ maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java 2007-11-08 00:25:38 UTC (rev 563)
@@ -108,7 +108,7 @@
}
public void testAuthDocument() {
- AuthDocument doc1 = new AuthDocument(username1, true);
+ AuthDocument doc1 = new AuthDocument(username1, true, AccountDocument.ACCOUNT_LEVEL_BASIC);
assertEquals(username1, doc1.getUsername());
assertTrue(doc1.isAuthenticated());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-07 21:06:49
|
Revision: 562
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=562&view=rev
Author: trevorolio
Date: 2007-11-07 13:06:54 -0800 (Wed, 07 Nov 2007)
Log Message:
-----------
Fixed the error message for the environment mojo check for the context and server xml files.
Modified Paths:
--------------
maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/VerifyEnvironmentMojo.java
Modified: maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/VerifyEnvironmentMojo.java
===================================================================
--- maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/VerifyEnvironmentMojo.java 2007-11-05 22:43:38 UTC (rev 561)
+++ maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/VerifyEnvironmentMojo.java 2007-11-07 21:06:54 UTC (rev 562)
@@ -154,7 +154,7 @@
private void fileOkForReading(File f) throws MojoExecutionException {
if ((!f.exists()) || (!f.canRead())) {
- throw new MojoExecutionException("Can't read context file:" + contextFile);
+ throw new MojoExecutionException("Can't read context file:" + f);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-05 22:47:13
|
Revision: 561
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=561&view=rev
Author: trevorolio
Date: 2007-11-05 14:43:38 -0800 (Mon, 05 Nov 2007)
Log Message:
-----------
Added js functions to ScriptContextMenuItems
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptContextMenuItemInfo.java
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptContextMenuItemInfo.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptContextMenuItemInfo.java 2007-11-05 22:43:34 UTC (rev 560)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptContextMenuItemInfo.java 2007-11-05 22:43:38 UTC (rev 561)
@@ -18,13 +18,25 @@
private ContextMenuItemInfo info;
- public void jsConstructor(String textToShow, boolean notGrayedOut, String forCallback) {
+ public void jsConstructor(String displayName, boolean enabled, String nonce) {
info=new ContextMenuItemInfo();
- info.setValues(textToShow, notGrayedOut, forCallback);
+ info.setValues(displayName, enabled, nonce);
}
+ public String jsGet_displayName(){
+ return info.getUserVisibleString();
+ }
+
+ public String jsGet_nonce(){
+ return info.getId();
+ }
+
+ public boolean jsGet_enabled(){
+ return info.getEnabled();
+ }
+
public String getUserVisibleString() {
return info.getUserVisibleString();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-05 22:47:09
|
Revision: 560
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=560&view=rev
Author: trevorolio
Date: 2007-11-05 14:43:34 -0800 (Mon, 05 Nov 2007)
Log Message:
-----------
Added js functions to ScriptContextMenuItems
Modified Paths:
--------------
maven/trunk/ogoglio/src/main/resources/scripts/testApplet.sh
Modified: maven/trunk/ogoglio/src/main/resources/scripts/testApplet.sh
===================================================================
--- maven/trunk/ogoglio/src/main/resources/scripts/testApplet.sh 2007-11-04 18:07:05 UTC (rev 559)
+++ maven/trunk/ogoglio/src/main/resources/scripts/testApplet.sh 2007-11-05 22:43:34 UTC (rev 560)
@@ -10,6 +10,4 @@
SPACE=$1
-ls -l $INT_TEST/*
-
java -Xmx512M -DAppletTestWindow.space=$SPACE -classpath $INT_TEST\:$COMMON\:$LIVEC\:$APPLET com.ogoglio.client.test.AppletTestWindow $2
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-04 18:07:01
|
Revision: 559
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=559&view=rev
Author: trevorolio
Date: 2007-11-04 10:07:05 -0800 (Sun, 04 Nov 2007)
Log Message:
-----------
Dead simple collision detection for avatars so that they stop walking through walls.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPicker.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/RenderableMotionInterpolator.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPicker.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPicker.java 2007-11-03 23:37:13 UTC (rev 558)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPicker.java 2007-11-04 18:07:05 UTC (rev 559)
@@ -32,16 +32,17 @@
private Point3d intersectionPoint = new Point3d();
private Renderable currentClosest = null;
+
private Point3d currentIntersection = new Point3d();
-
+
public Renderable pickRay(Point3d position, Vector3d direction) {
return pickRay(position, direction, intersectionPoint);
}
-
+
public Renderable pickRayClosest(Point3d position, Vector3d direction, Point3d intersectionPoint) {
currentClosest = null;
currentIntersection.set(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE);
-
+
rayPick.set(position, direction);
SceneGraphPath[] boundsColliders = renderer.getWorldGroup().pickAllSorted(rayPick);
if (boundsColliders == null) {
@@ -52,37 +53,37 @@
try {
intersects = intersectsRay((Shape3D) boundsColliders[i].getObject(), boundsColliders[i].getTransform(), position, direction, intersectionPoint);
} catch (Exception e) { //TODO track down whether this exception is our fault or QuarArray's. Arrgh
- if(boundsColliders[i].getObject() instanceof J3DPageRenderable.BrowserScreen) {
+ if (boundsColliders[i].getObject() instanceof J3DPageRenderable.BrowserScreen) {
intersects = true;
}
}
if (intersects) {
- if(currentClosest == null) {
+ if (currentClosest == null) {
currentClosest = convertToRenderable(boundsColliders[i].getObject());
currentIntersection.set(intersectionPoint);
- } else if(position.distance(intersectionPoint) < position.distance(currentIntersection)) {
+ } else if (position.distance(intersectionPoint) < position.distance(currentIntersection)) {
currentClosest = convertToRenderable(boundsColliders[i].getObject());
currentIntersection.set(intersectionPoint);
}
}
}
- if(currentClosest != null) {
+ if (currentClosest != null) {
intersectionPoint.set(currentIntersection);
}
return currentClosest;
}
-
+
private Renderable convertToRenderable(Object obj) {
- if(obj instanceof Renderable) {
+ if (obj instanceof Renderable) {
return (Renderable) obj;
}
- if(obj instanceof J3DShapeRenderable.InnerShape) {
- return ((J3DShapeRenderable.InnerShape)obj).getRenderable();
+ if (obj instanceof J3DShapeRenderable.InnerShape) {
+ return ((J3DShapeRenderable.InnerShape) obj).getRenderable();
}
return null;
}
-
+
public Renderable pickRay(Point3d position, Vector3d direction, Point3d intersectionPoint) {
rayPick.set(position, direction);
SceneGraphPath[] boundsColliders = renderer.getWorldGroup().pickAllSorted(rayPick);
@@ -94,17 +95,17 @@
try {
intersects = intersectsRay((Shape3D) boundsColliders[i].getObject(), boundsColliders[i].getTransform(), position, direction, intersectionPoint);
} catch (Exception e) { //TODO track down whether this exception is our fault or QuarArray's. Arrgh
- if(boundsColliders[i].getObject() instanceof J3DPageRenderable.BrowserScreen) {
+ if (boundsColliders[i].getObject() instanceof J3DPageRenderable.BrowserScreen) {
intersects = true;
}
}
if (intersects) {
Object obj = boundsColliders[i].getObject();
- if(obj instanceof Renderable) {
+ if (obj instanceof Renderable) {
return (Renderable) obj;
}
- if(obj instanceof J3DShapeRenderable.InnerShape) {
- return ((J3DShapeRenderable.InnerShape)obj).getRenderable();
+ if (obj instanceof J3DShapeRenderable.InnerShape) {
+ return ((J3DShapeRenderable.InnerShape) obj).getRenderable();
}
}
}
@@ -119,7 +120,13 @@
}
for (int i = 0; i < boundsColliders.length; i++) {
if (intersectsSegment((Shape3D) boundsColliders[i].getObject(), boundsColliders[i].getTransform(), startPoint, endPoint)) {
- return (Renderable) boundsColliders[i].getObject();
+ Object obj = boundsColliders[i].getObject();
+ if (obj instanceof Renderable) {
+ return (Renderable) obj;
+ }
+ if (obj instanceof J3DShapeRenderable.InnerShape) {
+ return ((J3DShapeRenderable.InnerShape) obj).getRenderable();
+ }
}
}
return null;
@@ -148,8 +155,11 @@
if (geometry == null) {
continue;
}
- if (intersectionUtils.rayUnknownGeometry(startPoint, getDirectionVector(startPoint, endPoint), (float) getDistance(startPoint, endPoint), geometry, localTransform, intersectionPoint, false)) {
- return true;
+ try {
+ if (intersectionUtils.rayUnknownGeometry(startPoint, getDirectionVector(startPoint, endPoint), (float) getDistance(startPoint, endPoint), geometry, localTransform, intersectionPoint, false)) {
+ return true;
+ }
+ } catch (Exception e) { //believe this is the same problem with the browser screen as pickRay, ignoring
}
}
return false;
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-03 23:37:13 UTC (rev 558)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-04 18:07:05 UTC (rev 559)
@@ -689,7 +689,7 @@
if (isLocalUser) {
float cameraHeight = (float) (renderable.getHeight() - renderable.getHeight() / 5);
- Vector3f defaultCameraLocation = new Vector3f(0f, cameraHeight, 0f);
+ Vector3f defaultCameraLocation = new Vector3f(0f, cameraHeight, 3f);
camera.setDefaultLocation(defaultCameraLocation);
camera.setLocation(defaultCameraLocation);
@@ -795,6 +795,10 @@
return worldGroup;
}
+ public J3DPicker getPicker(){
+ return picker;
+ }
+
private final static Vector3d DOWN_VEC = new Vector3d(0.0, -1.0, 0.0);
public class LandHeightMonitor {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-11-03 23:37:13 UTC (rev 558)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-11-04 18:07:05 UTC (rev 559)
@@ -95,7 +95,6 @@
}
public void initBody(J3DBodyData bodyData, BufferedImage customSkin) {
- System.out.println("INIT BODY: " + user + " bodyData: " + bodyData + " skin " + customSkin);
bodyGroup.removeAllChildren();
this.bodyData = bodyData;
skin = new SkinLoader(bodyData, user.getBodyConfiguration(), customSkin).generateSkin();
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/RenderableMotionInterpolator.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/RenderableMotionInterpolator.java 2007-11-03 23:37:13 UTC (rev 558)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/RenderableMotionInterpolator.java 2007-11-04 18:07:05 UTC (rev 559)
@@ -44,7 +44,7 @@
Vector3d newLocation = new Vector3d();
double newY = 0;
-
+
Transform3D currentPosition = new Transform3D();
Vector3d currentLocation = new Vector3d();
@@ -87,10 +87,10 @@
transformGroup.getTransform(newPosition);
newPosition.get(newLocation);
- if(path.followsPlatform()) {
+ if (path.followsPlatform()) {
newLocation.y = landHeightMonitor.getLandHeight(newLocation.x, newLocation.z, currentLocation.y + renderable.getHeight() / 2) + path.getDistanceFromPlatform();
}
- if (false && isColliding(newLocation)) {
+ if (isColliding(newLocation)) {
renderable.setPosition(currentPosition);
cleanup();
} else {
@@ -99,76 +99,39 @@
}
}
- PickCylinderSegment collisionPick = new PickCylinderSegment();
-
Point3d headPoint = new Point3d();
Point3d kneePoint = new Point3d();
- J3DIntersectionUtils intersectionUtils = new J3DIntersectionUtils();
+ Point3d frontPoint = new Point3d();
- Vector3d yVector = new Vector3d(0, -1, 0);
+ Renderable hitRenderable = null;
- Vector3d zVector = new Vector3d(0, 0, -1);
+ double bodyRadius = 0.1;
- Vector3d xVector = new Vector3d(-1, 0, 0);
-
- Transform3D local_tx = new Transform3D();
-
- Point3d wkPoint = new Point3d();
-
- Point3d locationPoint = new Point3d();
-
private boolean isColliding(Vector3d location) {
- headPoint.set(location.x, location.y + renderable.getHeight(), location.z);
+ headPoint.set(location.x, location.y + renderable.getHeight(), location.z + bodyRadius);
kneePoint.set(location.x, location.y + (renderable.getHeight() * 0.75), location.z);
- //System.out.println(headPoint + "\t" + kneePoint);
- collisionPick.set(headPoint, kneePoint, 0.01);
- SceneGraphPath[] boundsColliders = renderer.getWorldGroup().pickAllSorted(collisionPick);
- if (boundsColliders == null) {
- return false;
+ hitRenderable = renderer.getPicker().pickSegment(headPoint, kneePoint);
+ if (hitRenderable != null) {
+ return true;
}
- for (int i = 0; i < boundsColliders.length; i++) {
- Object userData = boundsColliders[i].getObject().getUserData();
- if (userData == null || ((String) userData).startsWith(J3DRenderer.USER_ID_PREFIX)) {
- continue;
- }
- local_tx = boundsColliders[i].getTransform();
- if (isReallyColliding((Shape3D) boundsColliders[i].getObject(), 0.5f)) {
- //System.out.println("Collided: " + boundsColliders[i].getObject().getUserData());
- return true;
- }
+ headPoint.set(headPoint.x, headPoint.y, headPoint.z - (2 * bodyRadius));
+ hitRenderable = renderer.getPicker().pickSegment(headPoint, kneePoint);
+ if (hitRenderable != null) {
+ return true;
}
- return false;
- }
-
- private boolean isReallyColliding(Shape3D i_shape, float pickingDistance) {
- Enumeration geom_list = i_shape.getAllGeometries();
-
- while (geom_list.hasMoreElements()) {
- GeometryArray geom = (GeometryArray) geom_list.nextElement();
-
- if (geom == null) {
- continue;
- }
- locationPoint.set(kneePoint.x, kneePoint.y, kneePoint.z);
- boolean intersect = intersectionUtils.rayUnknownGeometry(locationPoint, yVector, pickingDistance, geom, local_tx, wkPoint, false);
- if (!intersect) {
- locationPoint.z += pickingDistance / 2f;
- intersect = intersectionUtils.rayUnknownGeometry(locationPoint, zVector, pickingDistance, geom, local_tx, wkPoint, false);
- locationPoint.z -= pickingDistance / 2f;
- if (!intersect) {
- locationPoint.x += pickingDistance / 2f;
- intersect = intersectionUtils.rayUnknownGeometry(locationPoint, xVector, pickingDistance, geom, local_tx, wkPoint, false);
- locationPoint.x -= pickingDistance / 2f;
- }
- }
- if (intersect) {
- Log.info("wk " + wkPoint);
- return true;
- }
+ headPoint.set(headPoint.x - bodyRadius, headPoint.y, headPoint.z + bodyRadius);
+ hitRenderable = renderer.getPicker().pickSegment(headPoint, kneePoint);
+ if (hitRenderable != null) {
+ return true;
}
- return false;
+ headPoint.set(headPoint.x + (2 * bodyRadius), headPoint.y, headPoint.z);
+ hitRenderable = renderer.getPicker().pickSegment(headPoint, kneePoint);
+ if (hitRenderable != null) {
+ return true;
+ }
+ return hitRenderable != null;
}
public boolean isComplete() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-03 23:37:08
|
Revision: 558
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=558&view=rev
Author: trevorolio
Date: 2007-11-03 16:37:13 -0700 (Sat, 03 Nov 2007)
Log Message:
-----------
IDE missed the obj file during commit.
Added Paths:
-----------
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.obj
Property Changed:
----------------
maven/trunk/ogoglio-bodies/ogoglio-body-guest/
Property changes on: maven/trunk/ogoglio-bodies/ogoglio-body-guest
___________________________________________________________________
Name: svn:ignore
+ target
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.obj
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.obj (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.obj 2007-11-03 23:37:13 UTC (rev 558)
@@ -0,0 +1,8927 @@
+# Blender3D v244 OBJ File: MikeRigged.blend
+# www.blender3d.org
+o Mike
+v 0.311142 0.406033 -0.108595
+v 0.303021 0.345360 -0.125835
+v 0.227706 0.341257 -0.128513
+v 0.229273 0.409040 -0.107120
+v 0.294899 0.278192 -0.102832
+v 0.241228 0.253397 -0.120454
+v 0.226139 0.256499 -0.012092
+v 0.294899 0.270102 -0.036757
+v 0.303021 0.323897 0.025088
+v 0.227706 0.318876 0.024398
+v 0.311142 0.395855 0.014442
+v 0.229273 0.394438 0.000494
+v 0.314506 0.428960 -0.051745
+v 0.229922 0.422291 -0.054673
+v 0.032408 0.438193 0.019218
+v 0.000028 0.433348 0.028486
+v 0.000028 0.377973 0.023821
+v 0.049007 0.387226 0.014744
+v 0.031882 0.438606 0.041908
+v 0.000028 0.431574 0.061884
+v 0.021992 0.449185 0.072133
+v 0.000028 0.444615 0.081399
+v 0.016030 0.469902 0.076850
+v 0.000028 0.469598 0.081529
+v 0.012422 0.490974 0.083452
+v 0.000028 0.490011 0.087355
+v 0.009128 0.497154 0.079358
+v 0.000028 0.497166 0.081634
+v 0.012094 0.502695 0.087565
+v 0.000028 0.502377 0.089515
+v 0.020607 0.523745 0.080789
+v 0.000028 0.519527 0.090166
+v 0.014865 0.531088 0.096715
+v 0.000028 0.524749 0.102985
+v 0.013691 0.540315 0.093596
+v 0.000028 0.535999 0.105575
+v 0.006934 0.559235 0.089070
+v 0.000028 0.560304 0.094733
+v 0.014916 0.623913 0.087199
+v 0.000028 0.623913 0.087199
+v 0.000028 0.590254 0.090531
+v 0.010582 0.585735 0.084708
+v 0.030071 0.689433 0.033411
+v 0.000028 0.693038 0.037553
+v 0.000028 0.659557 0.075624
+v 0.022023 0.657368 0.073036
+v 0.030071 0.688165 -0.058547
+v 0.000028 0.691187 -0.060564
+v 0.038780 0.619464 -0.126007
+v 0.000028 0.620930 -0.128730
+v 0.038089 0.555866 -0.119522
+v 0.000028 0.555803 -0.122571
+v 0.030779 0.472175 -0.081673
+v 0.000028 0.472172 -0.082136
+v 0.000028 0.508952 -0.096572
+v 0.037557 0.507394 -0.092203
+v 0.032240 0.437063 -0.080951
+v 0.000028 0.433697 -0.084518
+v 0.009305 0.573542 0.082195
+v 0.000028 0.573009 0.087655
+v 0.026811 0.584435 0.071542
+v 0.040521 0.582635 0.067057
+v 0.049895 0.596475 0.070593
+v 0.028011 0.598325 0.081865
+v 0.047951 0.574371 0.059396
+v 0.057153 0.571919 0.048250
+v 0.039423 0.569399 0.067127
+v 0.048187 0.556122 0.062690
+v 0.026867 0.569700 0.072905
+v 0.025897 0.553701 0.072508
+v 0.018504 0.571587 0.076368
+v 0.013366 0.556996 0.078749
+v 0.022323 0.538583 0.079018
+v 0.032507 0.538061 0.069355
+v 0.053149 0.538678 0.045440
+v 0.069197 0.573117 0.032754
+v 0.059235 0.609482 0.058061
+v 0.032174 0.620979 0.079437
+v 0.022262 0.501677 0.080554
+v 0.038303 0.513808 0.066809
+v 0.032862 0.497765 0.070830
+v 0.046530 0.494389 0.061846
+v 0.020710 0.493805 0.077478
+v 0.036277 0.474128 0.069749
+v 0.019214 0.577472 0.076421
+v 0.010349 0.585259 0.084608
+v 0.053937 0.512055 0.044935
+v 0.056515 0.492857 0.041268
+v 0.046152 0.462052 0.048870
+v 0.049014 0.649793 0.053833
+v 0.073436 0.624977 0.026105
+v 0.079557 0.581437 0.011099
+v 0.067467 0.540893 0.013789
+v 0.064933 0.512990 0.011857
+v 0.063412 0.489249 0.013024
+v 0.052911 0.454943 0.012510
+v 0.053886 0.453386 0.001558
+v 0.077742 0.410787 -0.022260
+v 0.083865 0.431962 -0.044335
+v 0.060751 0.471467 -0.025079
+v 0.059151 0.675975 0.025682
+v 0.058545 0.673868 -0.054165
+v 0.070151 0.610003 -0.105443
+v 0.063792 0.554302 -0.100252
+v 0.058724 0.508456 -0.075485
+v 0.058092 0.473761 -0.057461
+v 0.066169 0.433346 -0.059552
+v 0.081789 0.634172 -0.004684
+v 0.082519 0.635104 -0.051578
+v 0.087981 0.600291 -0.078550
+v 0.078026 0.555455 -0.070254
+v 0.069087 0.512555 -0.043755
+v 0.071182 0.516580 -0.012704
+v 0.075481 0.546017 -0.017103
+v 0.091662 0.553537 -0.029029
+v 0.092180 0.571775 -0.025134
+v 0.077038 0.546506 -0.004031
+v 0.069544 0.520973 -0.005878
+v 0.084231 0.524297 -0.014313
+v 0.076922 0.552023 -0.031426
+v 0.092997 0.553324 -0.037942
+v 0.081448 0.517100 -0.018164
+v 0.085183 0.571371 -0.036702
+v 0.094337 0.576197 -0.039252
+v 0.087750 0.581460 -0.022004
+v 0.086741 0.578605 -0.014305
+v 0.094337 0.587110 -0.022076
+v 0.087812 0.602441 -0.015110
+v 0.000028 0.306033 0.078103
+v 0.098413 0.315753 0.058105
+v 0.000028 0.390553 -0.124096
+v 0.066103 0.392548 -0.118642
+v 0.127275 0.405948 -0.001655
+v 0.133119 0.432021 -0.049028
+v 0.105463 0.420778 -0.094615
+v 0.176177 0.321700 0.039256
+v 0.182500 0.403268 -0.006660
+v 0.183263 0.429829 -0.056155
+v 0.167158 0.411076 -0.096562
+v 0.156244 0.357656 -0.125999
+v 0.071801 0.287852 -0.142860
+v 0.000028 0.288407 -0.148833
+v 0.161383 0.280583 -0.135349
+v 0.000028 0.234817 0.101598
+v 0.088484 0.240522 0.093669
+v 0.183165 0.247821 0.074628
+v 0.219529 0.164758 0.009079
+v 0.220210 0.161960 -0.104152
+v 0.075033 0.180716 -0.154695
+v 0.000028 0.181746 -0.161272
+v 0.162609 0.175029 -0.143446
+v 0.000028 0.122600 0.129090
+v 0.081107 0.138150 0.122447
+v 0.169559 0.175308 0.080912
+v 0.392215 0.398575 -0.103312
+v 0.389599 0.341860 -0.118799
+v 0.363127 0.295690 -0.098197
+v 0.363926 0.288459 -0.038797
+v 0.371429 0.322571 -0.003214
+v 0.393038 0.393851 0.012893
+v 0.393035 0.421282 -0.052218
+v 0.480329 0.382575 -0.108943
+v 0.477818 0.339690 -0.116291
+v 0.476964 0.281307 -0.096437
+v 0.477731 0.274366 -0.039413
+v 0.479842 0.321220 0.003687
+v 0.481119 0.375678 -0.002511
+v 0.481116 0.403009 -0.052303
+v 0.534529 0.383467 -0.103144
+v 0.531846 0.339802 -0.113081
+v 0.530933 0.277408 -0.092400
+v 0.531753 0.279534 -0.038301
+v 0.531875 0.319938 -0.008492
+v 0.535374 0.377030 -0.007050
+v 0.535371 0.407429 -0.052026
+v 0.614205 0.370882 -0.094631
+v 0.611815 0.330580 -0.103040
+v 0.611002 0.272891 -0.089630
+v 0.611732 0.275147 -0.040212
+v 0.613742 0.312186 -0.013477
+v 0.614958 0.366006 -0.012141
+v 0.614955 0.393044 -0.052460
+v 0.697684 0.349483 -0.085306
+v 0.696158 0.323875 -0.094952
+v 0.695639 0.289056 -0.082154
+v 0.696105 0.284930 -0.045352
+v 0.697388 0.306451 -0.017489
+v 0.698164 0.345371 -0.021510
+v 0.698162 0.361660 -0.053638
+v 0.754698 0.333399 -0.077816
+v 0.753286 0.320252 -0.096420
+v 0.752805 0.296102 -0.081030
+v 0.753237 0.292513 -0.048656
+v 0.754424 0.311242 -0.024676
+v 0.755142 0.332518 -0.031850
+v 0.755141 0.337772 -0.056064
+v 0.807592 0.316963 -0.102882
+v 0.806886 0.309287 -0.104776
+v 0.806406 0.294584 -0.088101
+v 0.806837 0.303095 -0.044997
+v 0.790644 0.296553 -0.014002
+v 0.790965 0.316036 -0.012315
+v 0.791362 0.326429 -0.019325
+v 0.809505 0.337968 -0.055003
+v 0.808922 0.330058 -0.094521
+v 0.856666 0.324398 -0.107946
+v 0.856203 0.309974 -0.111118
+v 0.855723 0.301462 -0.090840
+v 0.839287 0.310210 -0.066552
+v 0.840293 0.307497 -0.051713
+v 0.818320 0.322653 -0.003366
+v 0.817355 0.311672 0.007191
+v 0.857701 0.307526 0.022552
+v 0.858060 0.320750 0.012845
+v 0.825749 0.327720 -0.017101
+v 0.822955 0.332172 -0.031065
+v 0.842806 0.337434 -0.069897
+v 0.857983 0.334552 -0.084306
+v 0.857616 0.332506 -0.094534
+v 0.878465 0.326286 -0.111195
+v 0.878262 0.310207 -0.113301
+v 0.877985 0.302192 -0.094581
+v 0.878107 0.307071 -0.081601
+v 0.855289 0.302989 -0.078731
+v 0.857342 0.294860 -0.010075
+v 0.856331 0.302742 -0.020943
+v 0.883379 0.306162 -0.026117
+v 0.879604 0.304083 -0.010124
+v 0.858060 0.328932 -0.015010
+v 0.859335 0.310650 -0.011660
+v 0.879896 0.317261 -0.006545
+v 0.884695 0.328932 -0.015010
+v 0.880023 0.335110 -0.081512
+v 0.885720 0.337257 -0.070783
+v 0.878872 0.316581 -0.087636
+v 0.883185 0.309870 -0.068091
+v 0.884684 0.317452 -0.063753
+v 0.883892 0.311136 -0.054673
+v 0.883766 0.316540 -0.032873
+v 0.882798 0.309195 -0.040030
+v 0.879877 0.329057 -0.101777
+v 0.885809 0.338866 -0.056774
+v 0.884694 0.340475 -0.042764
+v 0.884694 0.335037 -0.025919
+v 0.821182 0.289975 -0.011262
+v 0.857342 0.296060 0.017453
+v 0.817044 0.301665 0.001516
+v 0.911570 0.302867 -0.001241
+v 0.912187 0.313236 0.003461
+v 0.921627 0.301808 0.011660
+v 0.911065 0.291154 0.005491
+v 0.911065 0.291427 0.018073
+v 0.906535 0.317860 -0.113865
+v 0.906365 0.303624 -0.112733
+v 0.908014 0.322962 -0.102199
+v 0.906953 0.311825 -0.092512
+v 0.906088 0.299519 -0.099606
+v 0.941775 0.303009 -0.101606
+v 0.948146 0.291392 -0.105249
+v 0.939086 0.299501 -0.112069
+v 0.965350 0.305935 -0.071314
+v 0.972148 0.298701 -0.074351
+v 0.965218 0.305535 -0.078756
+v 0.841634 0.340336 -0.055388
+v 0.841149 0.335478 -0.037826
+v 0.855977 0.332205 -0.026418
+v 0.966390 0.309162 -0.055292
+v 0.974673 0.299676 -0.047939
+v 0.971513 0.296787 -0.057628
+v 0.964451 0.302563 -0.012991
+v 0.972537 0.294499 -0.017808
+v 0.964126 0.301372 -0.023422
+v 0.823797 0.295120 -0.027878
+v 0.845438 0.304521 -0.030178
+v 0.859012 0.318845 -0.005538
+v 0.894490 0.305101 0.030385
+v 0.895051 0.318576 0.021116
+v 0.885814 0.293930 0.022748
+v 0.885814 0.289052 0.007662
+v 0.886320 0.302423 -0.002559
+v 0.912689 0.306951 -0.066372
+v 0.913581 0.317452 -0.063753
+v 0.912581 0.306612 -0.081599
+v 0.913442 0.316905 -0.084002
+v 0.914497 0.329638 -0.081483
+v 0.914617 0.329435 -0.070742
+v 0.912890 0.309725 -0.039758
+v 0.913712 0.324143 -0.036580
+v 0.912790 0.308982 -0.052521
+v 0.913653 0.318456 -0.059502
+v 0.914706 0.332728 -0.056741
+v 0.914794 0.333791 -0.042728
+v 0.914101 0.307026 -0.010625
+v 0.914373 0.317271 -0.007286
+v 0.913522 0.303222 -0.023223
+v 0.914049 0.316792 -0.026910
+v 0.914768 0.327140 -0.024733
+v 0.914769 0.327838 -0.012102
+v 0.886936 0.318403 0.003433
+v 0.912187 0.310895 0.015093
+v 0.911626 0.301338 0.023150
+v 0.929923 0.302823 -0.092941
+v 0.932783 0.313122 -0.102193
+v 0.926876 0.290615 -0.099559
+v 0.927876 0.294607 -0.112685
+v 0.930554 0.308568 -0.113339
+v 0.943794 0.299756 -0.068410
+v 0.946499 0.308737 -0.063707
+v 0.943642 0.300252 -0.081565
+v 0.946286 0.308221 -0.083956
+v 0.949541 0.315907 -0.080187
+v 0.949614 0.316457 -0.070672
+v 0.948709 0.304082 -0.039728
+v 0.952027 0.315692 -0.036535
+v 0.948492 0.302545 -0.052486
+v 0.950999 0.310100 -0.059457
+v 0.954520 0.318716 -0.056666
+v 0.954779 0.319748 -0.042654
+v 0.942940 0.298888 -0.010096
+v 0.945144 0.308805 -0.006500
+v 0.941910 0.297813 -0.023194
+v 0.944731 0.308346 -0.027607
+v 0.950815 0.313296 -0.025232
+v 0.950934 0.314901 -0.011651
+v 0.947637 0.294064 -0.093913
+v 0.942769 0.283864 -0.099862
+v 0.944379 0.287197 -0.111653
+v 0.965252 0.291031 -0.069455
+v 0.968652 0.297354 -0.065851
+v 0.965150 0.291297 -0.079823
+v 0.968424 0.296990 -0.081691
+v 0.970543 0.293645 -0.040931
+v 0.973292 0.301255 -0.038216
+v 0.970114 0.292405 -0.051736
+v 0.966767 0.309976 -0.043425
+v 0.964109 0.287824 -0.011341
+v 0.967547 0.295527 -0.008501
+v 0.963276 0.287433 -0.022121
+v 0.967088 0.295062 -0.025569
+v 0.211918 0.060508 0.009634
+v 0.212598 0.057791 -0.088298
+v 0.075033 0.068439 -0.157155
+v 0.000028 0.071188 -0.160683
+v 0.162609 0.066391 -0.134785
+v 0.000028 0.018325 0.125006
+v 0.081107 0.033861 0.115662
+v 0.160689 0.047771 0.063222
+v 0.193886 -0.059312 0.010272
+v 0.194515 -0.061973 -0.077289
+v 0.073739 -0.054174 -0.145085
+v 0.000028 -0.050157 -0.148620
+v 0.154668 -0.059717 -0.122697
+v 0.000028 -0.085337 0.102384
+v 0.079352 -0.078306 0.096437
+v 0.152894 -0.064361 0.063819
+v 0.206643 -0.182710 0.006394
+v 0.207307 -0.185366 -0.080232
+v 0.073087 -0.183652 -0.163583
+v 0.000028 -0.181627 -0.176575
+v 0.158533 -0.187001 -0.140772
+v 0.000028 -0.183768 0.089989
+v 0.079013 -0.186118 0.087508
+v 0.156660 -0.188272 0.060982
+v 0.217632 -0.316931 0.008457
+v 0.218306 -0.319549 -0.070898
+v 0.078152 -0.336320 -0.156648
+v 0.009250 -0.309291 -0.164916
+v 0.164005 -0.323822 -0.126342
+v -0.001653 -0.264408 0.086143
+v 0.084163 -0.327601 0.074255
+v 0.162105 -0.325183 0.058479
+v 0.230176 -0.430637 0.005062
+v 0.230914 -0.433306 -0.066731
+v 0.006620 -0.377167 -0.122505
+v 0.083923 -0.441582 -0.135759
+v 0.030954 -0.438307 -0.119357
+v 0.165040 -0.437718 -0.116889
+v -0.002821 -0.332311 0.033739
+v 0.017958 -0.429087 0.007909
+v 0.090503 -0.441802 0.064600
+v 0.162960 -0.439271 0.050326
+v 0.222837 -0.553256 0.008807
+v 0.232208 -0.553787 -0.054626
+v 0.113148 -0.554776 -0.114688
+v 0.048644 -0.553257 -0.101597
+v 0.182910 -0.554391 -0.102225
+v 0.030896 -0.553254 0.020694
+v 0.101988 -0.553988 0.053602
+v 0.164625 -0.553797 0.048133
+v 0.004458 -0.430298 -0.042374
+v 0.015405 -0.553254 -0.044763
+v 0.002147 -0.380715 -0.043301
+v 0.206606 -0.670152 0.018721
+v 0.214418 -0.670689 -0.045876
+v 0.115159 -0.671683 -0.107040
+v 0.062475 -0.670163 -0.093709
+v 0.173319 -0.671297 -0.094348
+v 0.046989 -0.670148 0.030825
+v 0.105855 -0.670879 0.064337
+v 0.158075 -0.670688 0.058767
+v 0.034073 -0.670154 -0.035833
+v 0.198387 -0.790216 0.018314
+v 0.205576 -0.790744 -0.044596
+v 0.114234 -0.791730 -0.104164
+v 0.065752 -0.790211 -0.091181
+v 0.167755 -0.791346 -0.091803
+v 0.052777 -0.790214 0.030102
+v 0.105672 -0.790949 0.062739
+v 0.153727 -0.790758 0.057315
+v 0.041452 -0.790211 -0.034815
+v 0.183272 -0.909319 0.010603
+v 0.189607 -0.909826 -0.048240
+v 0.109122 -0.910791 -0.103956
+v 0.066403 -0.909277 -0.091813
+v 0.156281 -0.910411 -0.092394
+v 0.059015 -0.909321 0.021629
+v 0.101578 -0.910068 0.052156
+v 0.143921 -0.909875 0.047083
+v 0.044992 -0.909296 -0.039091
+v 0.183272 -1.019136 0.007524
+v 0.189607 -1.019634 -0.049842
+v 0.109122 -1.020592 -0.104159
+v 0.066403 -1.019080 -0.092321
+v 0.156281 -1.020214 -0.092888
+v 0.059015 -1.019139 0.018274
+v 0.101578 -1.019890 0.048035
+v 0.143921 -1.019696 0.043088
+v 0.044992 -1.019106 -0.040923
+v 0.173240 -1.123543 0.008080
+v 0.187740 -1.124102 -0.060565
+v 0.109122 -1.125059 -0.114883
+v 0.066403 -1.123548 -0.103045
+v 0.156281 -1.124681 -0.103611
+v 0.063244 -1.123546 0.018830
+v 0.102600 -1.124298 0.048591
+v 0.142476 -1.124104 0.043644
+v 0.048930 -1.123573 -0.051647
+v 0.176846 -1.187160 0.027773
+v 0.187644 -1.214756 -0.059215
+v 0.109122 -1.213050 -0.114414
+v 0.066403 -1.211538 -0.102576
+v 0.156281 -1.215113 -0.103130
+v 0.101578 -1.161543 0.182298
+v 0.065679 -1.176706 0.152622
+v 0.065679 -1.209567 0.152797
+v 0.101578 -1.215162 0.182584
+v 0.143921 -1.161349 0.177352
+v 0.143921 -1.214968 0.177638
+v 0.172564 -1.176703 0.141872
+v 0.172564 -1.217875 0.142092
+v 0.048930 -1.214235 -0.051164
+v 0.061397 -1.187217 0.028251
+v 0.060495 -1.139723 0.075530
+v 0.101578 -1.129409 0.075410
+v 0.060495 -1.215808 0.088571
+v 0.096161 -1.203909 0.025452
+v 0.101578 -1.223975 0.088549
+v 0.143921 -1.129189 0.075425
+v 0.142476 -1.203690 0.025231
+v 0.143921 -1.223755 0.088564
+v 0.177748 -1.139663 0.075534
+v 0.177748 -1.215747 0.088575
+v 0.152486 -1.224410 -0.061332
+v 0.106474 -1.224701 -0.060935
+v 0.019063 0.497120 0.072960
+v 0.028659 0.575952 0.074675
+v 0.037109 0.575812 0.070753
+v -0.311086 0.406033 -0.108594
+v -0.229217 0.409040 -0.107120
+v -0.227650 0.341256 -0.128513
+v -0.302964 0.345360 -0.125835
+v -0.241171 0.253397 -0.120454
+v -0.294843 0.278192 -0.102832
+v -0.226082 0.256499 -0.012092
+v -0.294843 0.270102 -0.036757
+v -0.227650 0.318876 0.024398
+v -0.302964 0.323897 0.025088
+v -0.229217 0.394438 0.000494
+v -0.311086 0.395855 0.014442
+v -0.229866 0.422291 -0.054673
+v -0.314450 0.428960 -0.051745
+v -0.032352 0.438193 0.019218
+v -0.048950 0.387226 0.014744
+v -0.031826 0.438606 0.041908
+v -0.021936 0.449185 0.072133
+v -0.015974 0.469902 0.076850
+v -0.012366 0.490974 0.083452
+v -0.009071 0.497154 0.079358
+v -0.012038 0.502695 0.087565
+v -0.020551 0.523745 0.080789
+v -0.014808 0.531088 0.096715
+v -0.013634 0.540315 0.093596
+v -0.006878 0.559235 0.089070
+v -0.014860 0.623913 0.087199
+v -0.010526 0.585735 0.084708
+v -0.030015 0.689433 0.033411
+v -0.021967 0.657368 0.073036
+v -0.030015 0.688165 -0.058547
+v -0.038724 0.619464 -0.126007
+v -0.037996 0.553636 -0.118622
+v -0.030722 0.472213 -0.074561
+v -0.037500 0.507394 -0.092203
+v -0.032184 0.437063 -0.080951
+v -0.009249 0.573542 0.082195
+v -0.026755 0.584435 0.071542
+v -0.027954 0.598325 0.081865
+v -0.049838 0.596475 0.070593
+v -0.040465 0.582635 0.067057
+v -0.057096 0.571919 0.048250
+v -0.047895 0.574371 0.059396
+v -0.048131 0.556122 0.062690
+v -0.039367 0.569399 0.067127
+v -0.025841 0.553701 0.072508
+v -0.026810 0.569700 0.072905
+v -0.018448 0.571587 0.076368
+v -0.013310 0.556996 0.078749
+v -0.032451 0.538061 0.069355
+v -0.022267 0.538583 0.079018
+v -0.053092 0.538678 0.045440
+v -0.069141 0.573117 0.032754
+v -0.059178 0.609482 0.058061
+v -0.032118 0.620979 0.079437
+v -0.038246 0.513808 0.066809
+v -0.022205 0.501677 0.080554
+v -0.046474 0.494389 0.061846
+v -0.032806 0.497765 0.070830
+v -0.036220 0.474128 0.069749
+v -0.020654 0.493805 0.077478
+v -0.019157 0.577472 0.076421
+v -0.010293 0.585259 0.084608
+v -0.053881 0.512055 0.044935
+v -0.053000 0.492857 0.041268
+v -0.046095 0.462052 0.048870
+v -0.048957 0.649793 0.053833
+v -0.073380 0.624977 0.026105
+v -0.079500 0.581437 0.011099
+v -0.067411 0.540893 0.013789
+v -0.064877 0.512990 0.011857
+v -0.063356 0.489249 0.013024
+v -0.052855 0.454981 0.019622
+v -0.053830 0.453386 0.001558
+v -0.060694 0.471467 -0.025079
+v -0.083809 0.431962 -0.044335
+v -0.077685 0.410787 -0.022260
+v -0.059095 0.675975 0.025682
+v -0.058488 0.673868 -0.054165
+v -0.070095 0.610003 -0.105443
+v -0.063575 0.553309 -0.099924
+v -0.058036 0.473761 -0.057461
+v -0.058667 0.508456 -0.075485
+v -0.066112 0.433346 -0.059552
+v -0.081732 0.634172 -0.004684
+v -0.082463 0.635104 -0.051578
+v -0.087924 0.600291 -0.078550
+v -0.076853 0.551430 -0.068695
+v -0.069030 0.512555 -0.043755
+v -0.071126 0.516580 -0.012704
+v -0.075424 0.546017 -0.017103
+v -0.092124 0.571775 -0.025134
+v -0.091605 0.553537 -0.029029
+v -0.076981 0.546506 -0.004031
+v -0.084175 0.524297 -0.014313
+v -0.069487 0.520973 -0.005878
+v -0.081392 0.517100 -0.018164
+v -0.092941 0.553324 -0.037942
+v -0.076866 0.552023 -0.031426
+v -0.094281 0.576197 -0.039252
+v -0.085126 0.571371 -0.036702
+v -0.087694 0.581460 -0.022004
+v -0.094281 0.587110 -0.022076
+v -0.086685 0.578605 -0.014305
+v -0.087755 0.602441 -0.015110
+v -0.098357 0.315753 0.058105
+v -0.066047 0.392548 -0.118642
+v -0.133063 0.432021 -0.049028
+v -0.127218 0.405948 -0.001655
+v -0.105407 0.420778 -0.094615
+v -0.182443 0.403268 -0.006660
+v -0.176121 0.321700 0.039256
+v -0.167102 0.411076 -0.096562
+v -0.183206 0.429829 -0.056155
+v -0.156187 0.357656 -0.125999
+v -0.071745 0.287852 -0.142860
+v -0.161326 0.280583 -0.135349
+v -0.088427 0.240522 0.093669
+v -0.183108 0.247821 0.074628
+v -0.220153 0.161960 -0.104152
+v -0.219473 0.164758 0.009079
+v -0.074976 0.180716 -0.154695
+v -0.162552 0.175029 -0.143446
+v -0.081050 0.138150 0.122447
+v -0.169503 0.175388 0.095807
+v -0.389543 0.341860 -0.118799
+v -0.392158 0.398575 -0.103312
+v -0.363071 0.295690 -0.098196
+v -0.363870 0.288459 -0.038797
+v -0.371373 0.322571 -0.003214
+v -0.392981 0.393851 0.012893
+v -0.392978 0.421282 -0.052218
+v -0.477762 0.339690 -0.116291
+v -0.480272 0.382575 -0.108943
+v -0.476907 0.281307 -0.096437
+v -0.477675 0.274366 -0.039413
+v -0.479785 0.321220 0.003687
+v -0.481063 0.375678 -0.002511
+v -0.481060 0.403009 -0.052303
+v -0.531790 0.339802 -0.113081
+v -0.534473 0.383467 -0.103144
+v -0.530877 0.277408 -0.092400
+v -0.531697 0.279534 -0.038301
+v -0.531819 0.319938 -0.008492
+v -0.535318 0.377030 -0.007050
+v -0.535315 0.407429 -0.052026
+v -0.611758 0.330580 -0.103040
+v -0.614149 0.370882 -0.094631
+v -0.610945 0.272891 -0.089630
+v -0.611676 0.275147 -0.040212
+v -0.613685 0.312186 -0.013477
+v -0.614901 0.366006 -0.012141
+v -0.614899 0.393044 -0.052460
+v -0.696101 0.323875 -0.094952
+v -0.697627 0.349483 -0.085306
+v -0.695582 0.289056 -0.082154
+v -0.696048 0.284930 -0.045352
+v -0.697331 0.306451 -0.017489
+v -0.698108 0.345371 -0.021510
+v -0.698106 0.361660 -0.053638
+v -0.753229 0.320252 -0.096420
+v -0.754641 0.333399 -0.077816
+v -0.752749 0.296102 -0.081030
+v -0.753180 0.292513 -0.048656
+v -0.754367 0.311242 -0.024676
+v -0.755086 0.332518 -0.031850
+v -0.755084 0.337772 -0.056064
+v -0.806830 0.309287 -0.104776
+v -0.807536 0.316963 -0.102882
+v -0.806349 0.294584 -0.088101
+v -0.806781 0.303095 -0.044997
+v -0.790587 0.296553 -0.014002
+v -0.791306 0.326429 -0.019325
+v -0.790909 0.316036 -0.012315
+v -0.809449 0.337968 -0.055003
+v -0.808866 0.330058 -0.094521
+v -0.856147 0.309974 -0.111118
+v -0.856609 0.324398 -0.107946
+v -0.855666 0.301462 -0.090840
+v -0.840237 0.307497 -0.051713
+v -0.839231 0.310210 -0.066552
+v -0.818264 0.322653 -0.003366
+v -0.858004 0.320750 0.012845
+v -0.857645 0.307526 0.022552
+v -0.817298 0.311672 0.007191
+v -0.822899 0.332171 -0.031065
+v -0.825692 0.327720 -0.017101
+v -0.857559 0.332506 -0.094534
+v -0.857926 0.334552 -0.084306
+v -0.842749 0.337434 -0.069897
+v -0.878409 0.326286 -0.111195
+v -0.878205 0.310207 -0.113301
+v -0.855233 0.302989 -0.078731
+v -0.878051 0.307071 -0.081601
+v -0.877928 0.302192 -0.094581
+v -0.857285 0.294860 -0.010075
+v -0.879547 0.304083 -0.010124
+v -0.883323 0.306162 -0.026117
+v -0.856275 0.302742 -0.020943
+v -0.858004 0.328932 -0.015010
+v -0.884639 0.328932 -0.015010
+v -0.879840 0.317261 -0.006545
+v -0.859278 0.310650 -0.011660
+v -0.879967 0.335110 -0.081512
+v -0.885664 0.337257 -0.070783
+v -0.878816 0.316581 -0.087636
+v -0.883129 0.309870 -0.068091
+v -0.883836 0.311136 -0.054673
+v -0.884627 0.317452 -0.063753
+v -0.883710 0.316540 -0.032873
+v -0.882741 0.309194 -0.040030
+v -0.879821 0.329057 -0.101777
+v -0.885752 0.338866 -0.056774
+v -0.884637 0.340475 -0.042764
+v -0.884638 0.335037 -0.025919
+v -0.821125 0.289975 -0.011262
+v -0.816987 0.301665 0.001516
+v -0.857285 0.296060 0.017453
+v -0.911514 0.302867 -0.001241
+v -0.921571 0.301808 0.011660
+v -0.912130 0.313236 0.003461
+v -0.911008 0.291154 0.005491
+v -0.911008 0.291427 0.018073
+v -0.906309 0.303624 -0.112733
+v -0.906479 0.317860 -0.113865
+v -0.907957 0.322962 -0.102199
+v -0.906896 0.311825 -0.092512
+v -0.906031 0.299519 -0.099606
+v -0.941719 0.303009 -0.101606
+v -0.939030 0.299501 -0.112069
+v -0.948090 0.291392 -0.105249
+v -0.965294 0.305935 -0.071314
+v -0.965162 0.305535 -0.078756
+v -0.972091 0.298701 -0.074351
+v -0.841578 0.340336 -0.055388
+v -0.855921 0.332205 -0.026418
+v -0.841092 0.335478 -0.037826
+v -0.966333 0.309162 -0.055292
+v -0.971457 0.296787 -0.057628
+v -0.974617 0.299676 -0.047939
+v -0.964395 0.302563 -0.012991
+v -0.964069 0.301372 -0.023422
+v -0.972481 0.294499 -0.017808
+v -0.823741 0.295120 -0.027878
+v -0.845382 0.304521 -0.030178
+v -0.858955 0.318845 -0.005538
+v -0.894994 0.318576 0.021116
+v -0.894433 0.305101 0.030385
+v -0.885758 0.293930 0.022748
+v -0.885758 0.289052 0.007662
+v -0.886263 0.302423 -0.002559
+v -0.913524 0.317452 -0.063753
+v -0.912633 0.306951 -0.066372
+v -0.912525 0.306612 -0.081599
+v -0.913386 0.316905 -0.084002
+v -0.914441 0.329638 -0.081483
+v -0.914561 0.329435 -0.070742
+v -0.913656 0.324143 -0.036580
+v -0.912834 0.309725 -0.039758
+v -0.912733 0.308982 -0.052521
+v -0.913596 0.318456 -0.059502
+v -0.914649 0.332728 -0.056741
+v -0.914738 0.333791 -0.042728
+v -0.914316 0.317271 -0.007286
+v -0.914044 0.307026 -0.010625
+v -0.913465 0.303222 -0.023223
+v -0.913992 0.316792 -0.026910
+v -0.914711 0.327140 -0.024733
+v -0.914712 0.327838 -0.012102
+v -0.886880 0.318403 0.003433
+v -0.912130 0.310895 0.015093
+v -0.911569 0.301338 0.023150
+v -0.932726 0.313122 -0.102193
+v -0.929867 0.302823 -0.092941
+v -0.926820 0.290615 -0.099559
+v -0.927820 0.294607 -0.112685
+v -0.930497 0.308568 -0.113339
+v -0.946442 0.308737 -0.063707
+v -0.943737 0.299756 -0.068410
+v -0.943586 0.300252 -0.081565
+v -0.946229 0.308221 -0.083956
+v -0.949484 0.315907 -0.080187
+v -0.949557 0.316457 -0.070672
+v -0.951971 0.315692 -0.036535
+v -0.948652 0.304082 -0.039728
+v -0.948436 0.302545 -0.052486
+v -0.950943 0.310100 -0.059457
+v -0.954463 0.318716 -0.056666
+v -0.954722 0.319748 -0.042654
+v -0.945088 0.308805 -0.006500
+v -0.942883 0.298888 -0.010096
+v -0.941854 0.297813 -0.023194
+v -0.944675 0.308346 -0.027607
+v -0.950759 0.313296 -0.025232
+v -0.950878 0.314901 -0.011651
+v -0.947581 0.294064 -0.093913
+v -0.942713 0.283864 -0.099862
+v -0.944323 0.287197 -0.111653
+v -0.968595 0.297354 -0.065851
+v -0.965195 0.291030 -0.069455
+v -0.965094 0.291297 -0.079823
+v -0.968368 0.296990 -0.081691
+v -0.973236 0.301254 -0.038216
+v -0.970486 0.293645 -0.040931
+v -0.970058 0.292405 -0.051736
+v -0.966710 0.309976 -0.043425
+v -0.967491 0.295527 -0.008501
+v -0.964053 0.287824 -0.011341
+v -0.963219 0.287433 -0.022121
+v -0.967031 0.295062 -0.025569
+v -0.212542 0.057791 -0.088298
+v -0.211862 0.060508 0.009634
+v -0.074976 0.068439 -0.157155
+v -0.162552 0.066391 -0.134785
+v -0.081050 0.033861 0.115662
+v -0.160633 0.047774 0.063700
+v -0.194459 -0.061973 -0.077289
+v -0.193830 -0.059312 0.010272
+v -0.073683 -0.054174 -0.145085
+v -0.154612 -0.059717 -0.122697
+v -0.079296 -0.078306 0.096437
+v -0.152838 -0.064359 0.064297
+v -0.207251 -0.185366 -0.080232
+v -0.206587 -0.182710 0.006394
+v -0.073030 -0.183652 -0.163583
+v -0.158477 -0.187001 -0.140772
+v -0.078957 -0.186118 0.087508
+v -0.156604 -0.188284 0.058716
+v -0.218249 -0.319549 -0.070898
+v -0.217576 -0.316931 0.008457
+v -0.078096 -0.336320 -0.156648
+v -0.163948 -0.323822 -0.126342
+v -0.084106 -0.327601 0.074255
+v -0.162049 -0.325183 0.058479
+v -0.230857 -0.433306 -0.066731
+v -0.230120 -0.430637 0.005062
+v -0.083867 -0.441582 -0.135759
+v -0.164983 -0.437718 -0.116889
+v -0.162904 -0.439271 0.050326
+v -0.090446 -0.441802 0.064600
+v -0.232151 -0.553788 -0.054626
+v -0.222780 -0.553256 0.008807
+v -0.030897 -0.438307 -0.119357
+v -0.048588 -0.553257 -0.101597
+v -0.113091 -0.554776 -0.114688
+v -0.182853 -0.554391 -0.102225
+v -0.101931 -0.553988 0.053602
+v -0.030840 -0.553254 0.020694
+v -0.017902 -0.429087 0.007909
+v -0.164568 -0.553797 0.048133
+v -0.004402 -0.430298 -0.042374
+v -0.015348 -0.553254 -0.044763
+v -0.214362 -0.670689 -0.045876
+v -0.206550 -0.670152 0.018721
+v -0.062418 -0.670163 -0.093709
+v -0.115103 -0.671683 -0.107040
+v -0.173263 -0.671297 -0.094348
+v -0.105799 -0.670879 0.064337
+v -0.046932 -0.670148 0.030825
+v -0.158019 -0.670688 0.058767
+v -0.034017 -0.670154 -0.035833
+v -0.205520 -0.790744 -0.044596
+v -0.198330 -0.790216 0.018314
+v -0.065695 -0.790211 -0.091181
+v -0.114178 -0.791730 -0.104164
+v -0.167699 -0.791346 -0.091803
+v -0.105616 -0.790949 0.062739
+v -0.052721 -0.790214 0.030102
+v -0.153670 -0.790758 0.057315
+v -0.041396 -0.790211 -0.034815
+v -0.189550 -0.909826 -0.048240
+v -0.183215 -0.909319 0.010603
+v -0.066346 -0.909277 -0.091813
+v -0.109066 -0.910791 -0.103956
+v -0.156225 -0.910411 -0.092394
+v -0.101522 -0.910068 0.052156
+v -0.058959 -0.909321 0.021629
+v -0.143864 -0.909875 0.047083
+v -0.044935 -0.909296 -0.039091
+v -0.189550 -1.019634 -0.049842
+v -0.183215 -1.019136 0.007524
+v -0.066346 -1.019080 -0.092321
+v -0.109066 -1.020592 -0.104159
+v -0.156225 -1.020214 -0.092888
+v -0.101522 -1.019890 0.048035
+v -0.058959 -1.019139 0.018274
+v -0.143864 -1.019696 0.043088
+v -0.044935 -1.019106 -0.040923
+v -0.187683 -1.124102 -0.060565
+v -0.173184 -1.123543 0.008080
+v -0.066346 -1.123548 -0.103045
+v -0.109066 -1.125059 -0.114883
+v -0.156225 -1.124681 -0.103611
+v -0.102543 -1.124298 0.048591
+v -0.063187 -1.123546 0.018830
+v -0.142420 -1.124104 0.043644
+v -0.048874 -1.123573 -0.051647
+v -0.187587 -1.214756 -0.059215
+v -0.176789 -1.187160 0.027773
+v -0.066346 -1.211538 -0.102576
+v -0.109066 -1.213050 -0.114414
+v -0.156225 -1.215113 -0.103130
+v -0.101522 -1.161543 0.182298
+v -0.101522 -1.215162 0.182584
+v -0.065622 -1.209567 0.152797
+v -0.065622 -1.176706 0.152622
+v -0.143864 -1.161349 0.177352
+v -0.143864 -1.214969 0.177638
+v -0.172507 -1.176703 0.141872
+v -0.172507 -1.217876 0.142092
+v -0.048874 -1.214235 -0.051164
+v -0.061340 -1.187217 0.028251
+v -0.101522 -1.129409 0.075410
+v -0.060438 -1.139723 0.075530
+v -0.060438 -1.215808 0.088571
+v -0.101522 -1.223975 0.088549
+v -0.096105 -1.203909 0.025452
+v -0.143864 -1.129189 0.075425
+v -0.143864 -1.223755 0.088564
+v -0.142420 -1.203690 0.025231
+v -0.177691 -1.139663 0.075534
+v -0.177691 -1.215747 0.088575
+v -0.152430 -1.224410 -0.061332
+v -0.106418 -1.224701 -0.060935
+v -0.019006 0.497120 0.072960
+v -0.037052 0.575812 0.070753
+v -0.028603 0.575952 0.074675
+vt 0.427454 0.740131 0.0
+vt 0.438597 0.750408 0.0
+vt 0.431466 0.770393 0.0
+vt 0.434880 0.782468 0.0
+vt 0.422384 0.780244 0.0
+vt 0.440667 0.777847 0.0
+vt 0.427454 0.740131 0.0
+vt 0.422736 0.714811 0.0
+vt 0.438597 0.750408 0.0
+vt 0.783757 0.949579 0.0
+vt 0.823691 0.964831 0.0
+vt 0.818269 0.976394 0.0
+vt 0.878816 0.748655 0.0
+vt 0.878222 0.741472 0.0
+vt 0.878126 0.757083 0.0
+vt 0.882168 0.725238 0.0
+vt 0.890343 0.718626 0.0
+vt 0.882718 0.709124 0.0
+vt 0.890534 0.682922 0.0
+vt 0.882319 0.674879 0.0
+vt 0.881867 0.691560 0.0
+vt 0.881394 0.955882 0.0
+vt 0.881506 0.931793 0.0
+vt 0.894276 0.943811 0.0
+vt 0.894856 0.910827 0.0
+vt 0.885900 0.919046 0.0
+vt 0.885968 0.902409 0.0
+vt 0.885108 0.885771 0.0
+vt 0.885109 0.865813 0.0
+vt 0.897563 0.875159 0.0
+vt 0.906060 0.839626 0.0
+vt 0.906313 0.831082 0.0
+vt 0.924478 0.820988 0.0
+vt 0.903836 0.637035 0.0
+vt 0.917699 0.629562 0.0
+vt 0.903836 0.621931 0.0
+vt 0.839646 0.855393 0.0
+vt 0.813124 0.858042 0.0
+vt 0.833916 0.839125 0.0
+vt 0.929134 0.955844 0.0
+vt 0.938925 0.960240 0.0
+vt 0.927060 0.968284 0.0
+vt 0.947316 0.919873 0.0
+vt 0.957924 0.923036 0.0
+vt 0.947215 0.928709 0.0
+vt 0.802353 0.650108 0.0
+vt 0.782094 0.673117 0.0
+vt 0.810244 0.660398 0.0
+vt 0.948118 0.900838 0.0
+vt 0.960360 0.892171 0.0
+vt 0.954752 0.906128 0.0
+vt 0.946623 0.850675 0.0
+vt 0.956761 0.856931 0.0
+vt 0.946372 0.863063 0.0
+vt 0.810244 0.660398 0.0
+vt 0.833979 0.657151 0.0
+vt 0.830762 0.641740 0.0
+vt 0.864567 0.852905 0.0
+vt 0.839646 0.855393 0.0
+vt 0.865300 0.841727 0.0
+vt 0.865300 0.841727 0.0
+vt 0.875924 0.845220 0.0
+vt 0.864567 0.852905 0.0
+vt 0.924478 0.820988 0.0
+vt 0.906313 0.831082 0.0
+vt 0.906313 0.817291 0.0
+vt 0.909799 0.799953 0.0
+vt 0.924478 0.820988 0.0
+vt 0.906313 0.817291 0.0
+vt 0.903836 0.621931 0.0
+vt 0.917699 0.629562 0.0
+vt 0.906760 0.612155 0.0
+vt 0.904229 0.645041 0.0
+vt 0.917699 0.629562 0.0
+vt 0.903836 0.637035 0.0
+vt 0.951206 0.843195 0.0
+vt 0.956761 0.856931 0.0
+vt 0.946623 0.850675 0.0
+vt 0.955457 0.664754 0.0
+vt 0.945063 0.657260 0.0
+vt 0.944415 0.670202 0.0
+vt 0.946372 0.863063 0.0
+vt 0.956761 0.856931 0.0
+vt 0.950851 0.869796 0.0
+vt 0.950675 0.649279 0.0
+vt 0.945063 0.657260 0.0
+vt 0.955457 0.664754 0.0
+vt 0.949639 0.677684 0.0
+vt 0.955457 0.664754 0.0
+vt 0.944415 0.670202 0.0
+vt 0.957344 0.879157 0.0
+vt 0.960360 0.892171 0.0
+vt 0.948409 0.886749 0.0
+vt 0.966841 0.701114 0.0
+vt 0.950063 0.692741 0.0
+vt 0.949730 0.705718 0.0
+vt 0.951948 0.713441 0.0
+vt 0.966841 0.701114 0.0
+vt 0.949730 0.705718 0.0
+vt 0.948409 0.886749 0.0
+vt 0.960360 0.892171 0.0
+vt 0.948118 0.900838 0.0
+vt 0.955139 0.682423 0.0
+vt 0.950063 0.692741 0.0
+vt 0.966841 0.701114 0.0
+vt 0.951326 0.913444 0.0
+vt 0.957924 0.923036 0.0
+vt 0.947316 0.919873 0.0
+vt 0.945951 0.726996 0.0
+vt 0.945872 0.739439 0.0
+vt 0.956964 0.732597 0.0
+vt 0.947215 0.928709 0.0
+vt 0.957924 0.923036 0.0
+vt 0.951638 0.934685 0.0
+vt 0.950176 0.719237 0.0
+vt 0.945951 0.726996 0.0
+vt 0.956964 0.732597 0.0
+vt 0.949773 0.745489 0.0
+vt 0.956964 0.732597 0.0
+vt 0.945872 0.739439 0.0
+vt 0.942606 0.765208 0.0
+vt 0.932261 0.752489 0.0
+vt 0.928477 0.763540 0.0
+vt 0.929728 0.777671 0.0
+vt 0.942606 0.765208 0.0
+vt 0.928477 0.763540 0.0
+vt 0.927060 0.968284 0.0
+vt 0.938925 0.960240 0.0
+vt 0.935532 0.973477 0.0
+vt 0.929134 0.955844 0.0
+vt 0.938045 0.945550 0.0
+vt 0.938925 0.960240 0.0
+vt 0.836919 0.103029 0.0
+vt 0.826685 0.103826 0.0
+vt 0.827790 0.119180 0.0
+vt 0.307877 0.683028 0.0
+vt 0.307168 0.677629 0.0
+vt 0.319912 0.682254 0.0
+vt 0.307883 0.689167 0.0
+vt 0.307877 0.683028 0.0
+vt 0.319912 0.682254 0.0
+vt 0.327851 0.785963 0.0
+vt 0.323067 0.777320 0.0
+vt 0.337820 0.778414 0.0
+vt 0.337820 0.778414 0.0
+vt 0.323067 0.777320 0.0
+vt 0.326919 0.771546 0.0
+vt 0.314084 0.786510 0.0
+vt 0.305938 0.779629 0.0
+vt 0.314835 0.777619 0.0
+vt 0.148340 0.740131 0.0
+vt 0.144327 0.770393 0.0
+vt 0.137197 0.750408 0.0
+vt 0.140914 0.782468 0.0
+vt 0.135127 0.777847 0.0
+vt 0.153410 0.780245 0.0
+vt 0.148340 0.740131 0.0
+vt 0.137197 0.750408 0.0
+vt 0.153058 0.714811 0.0
+vt 0.759791 0.759098 0.0
+vt 0.721608 0.776048 0.0
+vt 0.720556 0.766302 0.0
+vt 0.657632 0.951978 0.0
+vt 0.664515 0.959581 0.0
+vt 0.664429 0.945499 0.0
+vt 0.660869 0.930855 0.0
+vt 0.660373 0.916319 0.0
+vt 0.654731 0.922983 0.0
+vt 0.654592 0.892683 0.0
+vt 0.661141 0.900475 0.0
+vt 0.660733 0.885427 0.0
+vt 0.668332 0.765002 0.0
+vt 0.658480 0.752338 0.0
+vt 0.668227 0.742437 0.0
+vt 0.655366 0.722798 0.0
+vt 0.664047 0.714912 0.0
+vt 0.664111 0.730496 0.0
+vt 0.664853 0.699328 0.0
+vt 0.655758 0.688473 0.0
+vt 0.664852 0.680633 0.0
+vt 0.647439 0.654167 0.0
+vt 0.635457 0.639051 0.0
+vt 0.647076 0.647838 0.0
+vt 0.641323 0.851291 0.0
+vt 0.641323 0.837666 0.0
+vt 0.633918 0.844549 0.0
+vt 0.707438 0.670872 0.0
+vt 0.712805 0.655634 0.0
+vt 0.732281 0.673353 0.0
+vt 0.623613 0.764966 0.0
+vt 0.625556 0.776619 0.0
+vt 0.611958 0.769084 0.0
+vt 0.606581 0.733441 0.0
+vt 0.606677 0.741718 0.0
+vt 0.591634 0.736047 0.0
+vt 0.741548 0.853931 0.0
+vt 0.725749 0.872365 0.0
+vt 0.751142 0.883839 0.0
+vt 0.605830 0.713441 0.0
+vt 0.600230 0.717739 0.0
+vt 0.594149 0.705594 0.0
+vt 0.607231 0.666452 0.0
+vt 0.607466 0.678056 0.0
+vt 0.595964 0.672127 0.0
+vt 0.725749 0.872365 0.0
+vt 0.707240 0.855534 0.0
+vt 0.704339 0.869437 0.0
+vt 0.684094 0.668541 0.0
+vt 0.679017 0.655922 0.0
+vt 0.707438 0.670872 0.0
+vt 0.679017 0.655922 0.0
+vt 0.684094 0.668541 0.0
+vt 0.677279 0.660668 0.0
+vt 0.635457 0.639051 0.0
+vt 0.644990 0.635181 0.0
+vt 0.647076 0.647838 0.0
+vt 0.645395 0.623297 0.0
+vt 0.644990 0.635181 0.0
+vt 0.635457 0.639051 0.0
+vt 0.641323 0.837666 0.0
+vt 0.640930 0.832111 0.0
+vt 0.633918 0.844549 0.0
+vt 0.640969 0.858512 0.0
+vt 0.641323 0.851291 0.0
+vt 0.633918 0.844549 0.0
+vt 0.604994 0.657705 0.0
+vt 0.607231 0.666452 0.0
+vt 0.595964 0.672127 0.0
+vt 0.593921 0.876499 0.0
+vt 0.604719 0.881209 0.0
+vt 0.604134 0.869535 0.0
+vt 0.607466 0.678056 0.0
+vt 0.602342 0.684006 0.0
+vt 0.595964 0.672127 0.0
+vt 0.601724 0.864850 0.0
+vt 0.593921 0.876499 0.0
+vt 0.604134 0.869535 0.0
+vt 0.600872 0.886855 0.0
+vt 0.604719 0.881209 0.0
+vt 0.593921 0.876499 0.0
+vt 0.598673 0.694232 0.0
+vt 0.605558 0.700243 0.0
+vt 0.594149 0.705594 0.0
+vt 0.588119 0.909093 0.0
+vt 0.599924 0.913247 0.0
+vt 0.599624 0.901541 0.0
+vt 0.597378 0.920776 0.0
+vt 0.599924 0.913247 0.0
+vt 0.588119 0.909093 0.0
+vt 0.605558 0.700243 0.0
+vt 0.605830 0.713441 0.0
+vt 0.594149 0.705594 0.0
+vt 0.595348 0.896208 0.0
+vt 0.588119 0.909093 0.0
+vt 0.599624 0.901541 0.0
+vt 0.603925 0.725521 0.0
+vt 0.606581 0.733441 0.0
+vt 0.591634 0.736047 0.0
+vt 0.603333 0.932440 0.0
+vt 0.596542 0.937696 0.0
+vt 0.603404 0.943665 0.0
+vt 0.606677 0.741718 0.0
+vt 0.603547 0.748286 0.0
+vt 0.591634 0.736047 0.0
+vt 0.599384 0.927327 0.0
+vt 0.596542 0.937696 0.0
+vt 0.603333 0.932440 0.0
+vt 0.599935 0.947611 0.0
+vt 0.603404 0.943665 0.0
+vt 0.596542 0.937696 0.0
+vt 0.609456 0.969237 0.0
+vt 0.619096 0.965405 0.0
+vt 0.615683 0.958905 0.0
+vt 0.617967 0.978152 0.0
+vt 0.619096 0.965405 0.0
+vt 0.609456 0.969237 0.0
+vt 0.625556 0.776619 0.0
+vt 0.609526 0.785180 0.0
+vt 0.611958 0.769084 0.0
+vt 0.623613 0.764966 0.0
+vt 0.611958 0.769084 0.0
+vt 0.616937 0.755652 0.0
+vt 0.572927 0.530382 0.0
+vt 0.566156 0.502631 0.0
+vt 0.590713 0.519350 0.0
+vt 0.726568 0.522402 0.0
+vt 0.750036 0.520342 0.0
+vt 0.752120 0.547897 0.0
+vt 0.742486 0.103029 0.0
+vt 0.751615 0.119180 0.0
+vt 0.752720 0.103826 0.0
+vt 0.267917 0.683028 0.0
+vt 0.255882 0.682254 0.0
+vt 0.268625 0.677629 0.0
+vt 0.267911 0.689167 0.0
+vt 0.255882 0.682254 0.0
+vt 0.267917 0.683028 0.0
+vt 0.247942 0.785963 0.0
+vt 0.237974 0.778414 0.0
+vt 0.252726 0.777320 0.0
+vt 0.237974 0.778414 0.0
+vt 0.248875 0.771546 0.0
+vt 0.252726 0.777320 0.0
+vt 0.261710 0.786510 0.0
+vt 0.260959 0.777619 0.0
+vt 0.269856 0.779629 0.0
+vt 0.778178 0.521716 0.0
+vt 0.752120 0.547897 0.0
+vt 0.750036 0.520342 0.0
+vt 0.929621 0.529697 0.0
+vt 0.914835 0.518664 0.0
+vt 0.937282 0.501946 0.0
+vt 0.297068 0.784764 0.0
+vt 0.287897 0.786482 0.0
+vt 0.287897 0.771015 0.0
+vt 0.296877 0.784365 0.0
+vt 0.297068 0.784764 0.0
+vt 0.287897 0.771015 0.0
+vt 0.296186 0.773536 0.0
+vt 0.296877 0.784365 0.0
+vt 0.287897 0.771015 0.0
+vt 0.314084 0.786510 0.0
+vt 0.312323 0.795871 0.0
+vt 0.297068 0.784764 0.0
+vt 0.314084 0.786510 0.0
+vt 0.297068 0.784764 0.0
+vt 0.296877 0.784365 0.0
+vt 0.314084 0.786510 0.0
+vt 0.296877 0.784365 0.0
+vt 0.305938 0.779629 0.0
+vt 0.836011 0.677063 0.0
+vt 0.852831 0.679764 0.0
+vt 0.861297 0.668690 0.0
+vt 0.833979 0.657151 0.0
+vt 0.836011 0.677063 0.0
+vt 0.861297 0.668690 0.0
+vt 0.833979 0.657151 0.0
+vt 0.861297 0.668690 0.0
+vt 0.861774 0.655698 0.0
+vt 0.862960 0.866423 0.0
+vt 0.851523 0.879943 0.0
+vt 0.837491 0.871939 0.0
+vt 0.862960 0.866423 0.0
+vt 0.837491 0.871939 0.0
+vt 0.839646 0.855393 0.0
+vt 0.864567 0.852905 0.0
+vt 0.862960 0.866423 0.0
+vt 0.839646 0.855393 0.0
+vt 0.287897 0.771015 0.0
+vt 0.287897 0.786482 0.0
+vt 0.278725 0.784764 0.0
+vt 0.287897 0.771015 0.0
+vt 0.278725 0.784764 0.0
+vt 0.278917 0.784365 0.0
+vt 0.287897 0.771015 0.0
+vt 0.278917 0.784365 0.0
+vt 0.279608 0.773536 0.0
+vt 0.278725 0.784764 0.0
+vt 0.263470 0.795871 0.0
+vt 0.261710 0.786510 0.0
+vt 0.278917 0.784365 0.0
+vt 0.278725 0.784764 0.0
+vt 0.261710 0.786510 0.0
+vt 0.269856 0.779629 0.0
+vt 0.278917 0.784365 0.0
+vt 0.261710 0.786510 0.0
+vt 0.679696 0.879845 0.0
+vt 0.687333 0.889834 0.0
+vt 0.702505 0.887398 0.0
+vt 0.679696 0.879845 0.0
+vt 0.702505 0.887398 0.0
+vt 0.704339 0.869437 0.0
+vt 0.678988 0.868123 0.0
+vt 0.679696 0.879845 0.0
+vt 0.704339 0.869437 0.0
+vt 0.709457 0.686371 0.0
+vt 0.696312 0.693868 0.0
+vt 0.685599 0.681204 0.0
+vt 0.707438 0.670872 0.0
+vt 0.709457 0.686371 0.0
+vt 0.685599 0.681204 0.0
+vt 0.707438 0.670872 0.0
+vt 0.685599 0.681204 0.0
+vt 0.684094 0.668541 0.0
+vt 0.590713 0.519350 0.0
+vt 0.566156 0.502631 0.0
+vt 0.590768 0.476412 0.0
+vt 0.566156 0.502631 0.0
+vt 0.572503 0.477711 0.0
+vt 0.590768 0.476412 0.0
+vt 0.566156 0.502631 0.0
+vt 0.545293 0.501014 0.0
+vt 0.545219 0.480807 0.0
+vt 0.566156 0.502631 0.0
+vt 0.545219 0.480807 0.0
+vt 0.572503 0.477711 0.0
+vt 0.545293 0.501014 0.0
+vt 0.517265 0.520571 0.0
+vt 0.522656 0.481192 0.0
+vt 0.545293 0.501014 0.0
+vt 0.522656 0.481192 0.0
+vt 0.545219 0.480807 0.0
+vt 0.726568 0.522402 0.0
+vt 0.725240 0.475888 0.0
+vt 0.746380 0.481192 0.0
+vt 0.726568 0.522402 0.0
+vt 0.746380 0.481192 0.0
+vt 0.750036 0.520342 0.0
+vt 0.123527 0.751623 0.0
+vt 0.104611 0.748122 0.0
+vt 0.120903 0.697094 0.0
+vt 0.123527 0.751623 0.0
+vt 0.120903 0.697094 0.0
+vt 0.148932 0.700520 0.0
+vt 0.452266 0.751623 0.0
+vt 0.471660 0.752305 0.0
+vt 0.448833 0.771897 0.0
+vt 0.471660 0.752305 0.0
+vt 0.471989 0.798654 0.0
+vt 0.448833 0.771897 0.0
+vt 0.104611 0.748122 0.0
+vt 0.078802 0.748541 0.0
+vt 0.088723 0.695826 0.0
+vt 0.104611 0.748122 0.0
+vt 0.088723 0.695826 0.0
+vt 0.120903 0.697094 0.0
+vt 0.078802 0.748541 0.0
+vt 0.052534 0.748635 0.0
+vt 0.060344 0.694535 0.0
+vt 0.078802 0.748541 0.0
+vt 0.060344 0.694535 0.0
+vt 0.088723 0.695826 0.0
+vt 0.060344 0.694535 0.0
+vt 0.052534 0.748635 0.0
+vt 0.023883 0.694877 0.0
+vt 0.052534 0.748635 0.0
+vt 0.023883 0.751250 0.0
+vt 0.023883 0.694877 0.0
+vt 0.515450 0.694535 0.0
+vt 0.551911 0.694877 0.0
+vt 0.523452 0.750719 0.0
+vt 0.551911 0.694877 0.0
+vt 0.551911 0.751250 0.0
+vt 0.523452 0.750719 0.0
+vt 0.523452 0.750719 0.0
+vt 0.497037 0.749496 0.0
+vt 0.515450 0.694535 0.0
+vt 0.497037 0.749496 0.0
+vt 0.487071 0.695826 0.0
+vt 0.515450 0.694535 0.0
+vt 0.497037 0.749496 0.0
+vt 0.471660 0.752305 0.0
+vt 0.487071 0.695826 0.0
+vt 0.471660 0.752305 0.0
+vt 0.454891 0.697094 0.0
+vt 0.487071 0.695826 0.0
+vt 0.269856 0.779629 0.0
+vt 0.260959 0.777619 0.0
+vt 0.270487 0.773224 0.0
+vt 0.260959 0.777619 0.0
+vt 0.262033 0.771600 0.0
+vt 0.270487 0.773224 0.0
+vt 0.252726 0.777320 0.0
+vt 0.248875 0.771546 0.0
+vt 0.262033 0.771600 0.0
+vt 0.252726 0.777320 0.0
+vt 0.262033 0.771600 0.0
+vt 0.260959 0.777619 0.0
+vt 0.247942 0.785963 0.0
+vt 0.252726 0.777320 0.0
+vt 0.261710 0.786510 0.0
+vt 0.252726 0.777320 0.0
+vt 0.260959 0.777619 0.0
+vt 0.261710 0.786510 0.0
+vt 0.277678 0.692181 0.0
+vt 0.267911 0.689167 0.0
+vt 0.278594 0.683437 0.0
+vt 0.267911 0.689167 0.0
+vt 0.267917 0.683028 0.0
+vt 0.278594 0.683437 0.0
+vt 0.278594 0.683437 0.0
+vt 0.267917 0.683028 0.0
+vt 0.268625 0.677629 0.0
+vt 0.278594 0.683437 0.0
+vt 0.268625 0.677629 0.0
+vt 0.276945 0.675024 0.0
+vt 0.661379 0.116674 0.0
+vt 0.670983 0.096866 0.0
+vt 0.676276 0.118412 0.0
+vt 0.661379 0.116674 0.0
+vt 0.676276 0.118412 0.0
+vt 0.671160 0.136266 0.0
+vt 0.755213 0.048698 0.0
+vt 0.755213 0.015923 0.0
+vt 0.746876 0.029001 0.0
+vt 0.755213 0.048698 0.0
+vt 0.746876 0.029001 0.0
+vt 0.745367 0.048679 0.0
+vt 0.671160 0.136266 0.0
+vt 0.676276 0.118412 0.0
+vt 0.679109 0.154393 0.0
+vt 0.676276 0.118412 0.0
+vt 0.684917 0.115904 0.0
+vt 0.679109 0.154393 0.0
+vt 0.767538 0.048704 0.0
+vt 0.767538 0.014104 0.0
+vt 0.755213 0.015923 0.0
+vt 0.767538 0.048704 0.0
+vt 0.755213 0.015923 0.0
+vt 0.755213 0.048698 0.0
+vt 0.679109 0.154393 0.0
+vt 0.684917 0.115904 0.0
+vt 0.699975 0.153394 0.0
+vt 0.684917 0.115904 0.0
+vt 0.695664 0.116810 0.0
+vt 0.699975 0.153394 0.0
+vt 0.779496 0.048680 0.0
+vt 0.777987 0.025048 0.0
+vt 0.767538 0.048704 0.0
+vt 0.777987 0.025048 0.0
+vt 0.767538 0.014104 0.0
+vt 0.767538 0.048704 0.0
+vt 0.712940 0.135782 0.0
+vt 0.705350 0.120193 0.0
+vt 0.723465 0.112209 0.0
+vt 0.705350 0.120193 0.0
+vt 0.708887 0.099613 0.0
+vt 0.723465 0.112209 0.0
+vt 0.699975 0.153394 0.0
+vt 0.695664 0.116810 0.0
+vt 0.705350 0.120193 0.0
+vt 0.699975 0.153394 0.0
+vt 0.705350 0.120193 0.0
+vt 0.712940 0.135782 0.0
+vt 0.766113 0.103681 0.0
+vt 0.782862 0.100067 0.0
+vt 0.767240 0.070322 0.0
+vt 0.782862 0.100067 0.0
+vt 0.779234 0.070808 0.0
+vt 0.767240 0.070322 0.0
+vt 0.765342 0.123326 0.0
+vt 0.777776 0.118969 0.0
+vt 0.766113 0.103681 0.0
+vt 0.777776 0.118969 0.0
+vt 0.782862 0.100067 0.0
+vt 0.766113 0.103681 0.0
+vt 0.755633 0.070403 0.0
+vt 0.752720 0.103826 0.0
+vt 0.766113 0.103681 0.0
+vt 0.755633 0.070403 0.0
+vt 0.766113 0.103681 0.0
+vt 0.767240 0.070322 0.0
+vt 0.745629 0.070983 0.0
+vt 0.742486 0.103029 0.0
+vt 0.755633 0.070403 0.0
+vt 0.742486 0.103029 0.0
+vt 0.752720 0.103826 0.0
+vt 0.755633 0.070403 0.0
+vt 0.752720 0.103826 0.0
+vt 0.751615 0.119180 0.0
+vt 0.766113 0.103681 0.0
+vt 0.751615 0.119180 0.0
+vt 0.765342 0.123326 0.0
+vt 0.766113 0.103681 0.0
+vt 0.653733 0.134852 0.0
+vt 0.661379 0.116674 0.0
+vt 0.671160 0.136266 0.0
+vt 0.653733 0.134852 0.0
+vt 0.671160 0.136266 0.0
+vt 0.659993 0.167576 0.0
+vt 0.755633 0.070403 0.0
+vt 0.755213 0.048698 0.0
+vt 0.745367 0.048679 0.0
+vt 0.755633 0.070403 0.0
+vt 0.745367 0.048679 0.0
+vt 0.745629 0.070983 0.0
+vt 0.659993 0.167576 0.0
+vt 0.671160 0.136266 0.0
+vt 0.678167 0.167637 0.0
+vt 0.671160 0.136266 0.0
+vt 0.679109 0.154393 0.0
+vt 0.678167 0.167637 0.0
+vt 0.767240 0.070322 0.0
+vt 0.767538 0.048704 0.0
+vt 0.755633 0.070403 0.0
+vt 0.767538 0.048704 0.0
+vt 0.755213 0.048698 0.0
+vt 0.755633 0.070403 0.0
+vt 0.678167 0.167637 0.0
+vt 0.679109 0.154393 0.0
+vt 0.700571 0.167542 0.0
+vt 0.679109 0.154393 0.0
+vt 0.699975 0.153394 0.0
+vt 0.700571 0.167542 0.0
+vt 0.779234 0.070808 0.0
+vt 0.779496 0.048680 0.0
+vt 0.767240 0.070322 0.0
+vt 0.779496 0.048680 0.0
+vt 0.767538 0.048704 0.0
+vt 0.767240 0.070322 0.0
+vt 0.719413 0.167566 0.0
+vt 0.712940 0.135782 0.0
+vt 0.732342 0.135259 0.0
+vt 0.712940 0.135782 0.0
+vt 0.723465 0.112209 0.0
+vt 0.732342 0.135259 0.0
+vt 0.700571 0.167542 0.0
+vt 0.699975 0.153394 0.0
+vt 0.712940 0.135782 0.0
+vt 0.700571 0.167542 0.0
+vt 0.712940 0.135782 0.0
+vt 0.719413 0.167566 0.0
+vt 0.719413 0.167566 0.0
+vt 0.732342 0.135259 0.0
+vt 0.737341 0.167617 0.0
+vt 0.732342 0.135259 0.0
+vt 0.743832 0.135219 0.0
+vt 0.737341 0.167617 0.0
+vt 0.737341 0.167617 0.0
+vt 0.743832 0.135219 0.0
+vt 0.755973 0.135295 0.0
+vt 0.737341 0.167617 0.0
+vt 0.755973 0.135295 0.0
+vt 0.752744 0.167632 0.0
+vt 0.676276 0.118412 0.0
+vt 0.670983 0.096866 0.0
+vt 0.684421 0.094127 0.0
+vt 0.676276 0.118412 0.0
+vt 0.684421 0.094127 0.0
+vt 0.684917 0.115904 0.0
+vt 0.684917 0.115904 0.0
+vt 0.684421 0.094127 0.0
+vt 0.695664 0.116810 0.0
+vt 0.684421 0.094127 0.0
+vt 0.696656 0.094839 0.0
+vt 0.695664 0.116810 0.0
+vt 0.695664 0.116810 0.0
+vt 0.696656 0.094839 0.0
+vt 0.705350 0.120193 0.0
+vt 0.696656 0.094839 0.0
+vt 0.708887 0.099613 0.0
+vt 0.705350 0.120193 0.0
+vt 0.613991 0.167613 0.0
+vt 0.601127 0.134980 0.0
+vt 0.622075 0.134933 0.0
+vt 0.613991 0.167613 0.0
+vt 0.622075 0.134933 0.0
+vt 0.637683 0.167610 0.0
+vt 0.766622 0.167609 0.0
+vt 0.767713 0.135296 0.0
+vt 0.779367 0.167613 0.0
+vt 0.767713 0.135296 0.0
+vt 0.778718 0.135282 0.0
+vt 0.779367 0.167613 0.0
+vt 0.752744 0.167632 0.0
+vt 0.755973 0.135295 0.0
+vt 0.766622 0.167609 0.0
+vt 0.755973 0.135295 0.0
+vt 0.767713 0.135296 0.0
+vt 0.766622 0.167609 0.0
+vt 0.637683 0.167610 0.0
+vt 0.622075 0.134933 0.0
+vt 0.653733 0.134852 0.0
+vt 0.637683 0.167610 0.0
+vt 0.653733 0.134852 0.0
+vt 0.659993 0.167576 0.0
+vt 0.718996 0.215620 0.0
+vt 0.719413 0.167566 0.0
+vt 0.735133 0.215209 0.0
+vt 0.719413 0.167566 0.0
+vt 0.737341 0.167617 0.0
+vt 0.735133 0.215209 0.0
+vt 0.735133 0.215209 0.0
+vt 0.737341 0.167617 0.0
+vt 0.752089 0.215140 0.0
+vt 0.737341 0.167617 0.0
+vt 0.752744 0.167632 0.0
+vt 0.752089 0.215140 0.0
+vt 0.661319 0.216102 0.0
+vt 0.659993 0.167576 0.0
+vt 0.677743 0.215783 0.0
+vt 0.659993 0.167576 0.0
+vt 0.678167 0.167637 0.0
+vt 0.677743 0.215783 0.0
+vt 0.677743 0.215783 0.0
+vt 0.678167 0.167637 0.0
+vt 0.701327 0.216084 0.0
+vt 0.678167 0.167637 0.0
+vt 0.700571 0.167542 0.0
+vt 0.701327 0.216084 0.0
+vt 0.701327 0.216084 0.0
+vt 0.700571 0.167542 0.0
+vt 0.719413 0.167566 0.0
+vt 0.701327 0.216084 0.0
+vt 0.719413 0.167566 0.0
+vt 0.718996 0.215620 0.0
+vt 0.620177 0.215175 0.0
+vt 0.613991 0.167613 0.0
+vt 0.637683 0.167610 0.0
+vt 0.620177 0.215175 0.0
+vt 0.637683 0.167610 0.0
+vt 0.642203 0.215615 0.0
+vt 0.766521 0.215071 0.0
+vt 0.766622 0.167609 0.0
+vt 0.779367 0.167613 0.0
+vt 0.766521 0.215071 0.0
+vt 0.779367 0.167613 0.0
+vt 0.779893 0.215175 0.0
+vt 0.752089 0.215140 0.0
+vt 0.752744 0.167632 0.0
+vt 0.766521 0.215071 0.0
+vt 0.752744 0.167632 0.0
+vt 0.766622 0.167609 0.0
+vt 0.766521 0.215071 0.0
+vt 0.642203 0.215615 0.0
+vt 0.637683 0.167610 0.0
+vt 0.659993 0.167576 0.0
+vt 0.642203 0.215615 0.0
+vt 0.659993 0.167576 0.0
+vt 0.661319 0.216102 0.0
+vt 0.509019 0.285475 0.0
+vt 0.510404 0.240734 0.0
+vt 0.546297 0.285617 0.0
+vt 0.510404 0.240734 0.0
+vt 0.547618 0.240875 0.0
+vt 0.546297 0.285617 0.0
+vt 0.546297 0.285617 0.0
+vt 0.547618 0.240875 0.0
+vt 0.576619 0.285739 0.0
+vt 0.547618 0.240875 0.0
+vt 0.576943 0.240997 0.0
+vt 0.576619 0.285739 0.0
+vt 0.679751 0.285500 0.0
+vt 0.678342 0.240758 0.0
+vt 0.702615 0.240452 0.0
+vt 0.679751 0.285500 0.0
+vt 0.702615 0.240452 0.0
+vt 0.703390 0.285194 0.0
+vt 0.703390 0.285194 0.0
+vt 0.702615 0.240452 0.0
+vt 0.721890 0.285104 0.0
+vt 0.702615 0.240452 0.0
+vt 0.722139 0.240363 0.0
+vt 0.721890 0.285104 0.0
+vt 0.721890 0.285104 0.0
+vt 0.722139 0.240363 0.0
+vt 0.738895 0.285475 0.0
+vt 0.722139 0.240363 0.0
+vt 0.740281 0.240734 0.0
+vt 0.738895 0.285475 0.0
+vt 0.625180 0.285278 0.0
+vt 0.624653 0.240536 0.0
+vt 0.651537 0.240679 0.0
+vt 0.625180 0.285278 0.0
+vt 0.651537 0.240679 0.0
+vt 0.652523 0.285421 0.0
+vt 0.599396 0.285149 0.0
+vt 0.599410 0.240407 0.0
+vt 0.624653 0.240536 0.0
+vt 0.599396 0.285149 0.0
+vt 0.624653 0.240536 0.0
+vt 0.625180 0.285278 0.0
+vt 0.576619 0.285739 0.0
+vt 0.576943 0.240997 0.0
+vt 0.599396 0.285149 0.0
+vt 0.576943 0.240997 0.0
+vt 0.599410 0.240407 0.0
+vt 0.599396 0.285149 0.0
+vt 0.652523 0.285421 0.0
+vt 0.651537 0.240679 0.0
+vt 0.678342 0.240758 0.0
+vt 0.652523 0.285421 0.0
+vt 0.678342 0.240758 0.0
+vt 0.679751 0.285500 0.0
+vt 0.508235 0.333991 0.0
+vt 0.509019 0.285475 0.0
+vt 0.543548 0.334133 0.0
+vt 0.509019 0.285475 0.0
+vt 0.546297 0.285617 0.0
+vt 0.543548 0.334133 0.0
+vt 0.543548 0.334133 0.0
+vt 0.546297 0.285617 0.0
+vt 0.575977 0.334255 0.0
+vt 0.546297 0.285617 0.0
+vt 0.576619 0.285739 0.0
+vt 0.575977 0.334255 0.0
+vt 0.679508 0.334015 0.0
+vt 0.679751 0.285500 0.0
+vt 0.701550 0.333710 0.0
+vt 0.679751 0.285500 0.0
+vt 0.703390 0.285194 0.0
+vt 0.701550 0.333710 0.0
+vt 0.701550 0.333710 0.0
+vt 0.703390 0.285194 0.0
+vt 0.719834 0.333620 0.0
+vt 0.703390 0.285194 0.0
+vt 0.721890 0.285104 0.0
+vt 0.719834 0.333620 0.0
+vt 0.719834 0.333620 0.0
+vt 0.721890 0.285104 0.0
+vt 0.738112 0.333991 0.0
+vt 0.721890 0.285104 0.0
+vt 0.738895 0.285475 0.0
+vt 0.738112 0.333991 0.0
+vt 0.628024 0.333794 0.0
+vt 0.625180 0.285278 0.0
+vt 0.652523 0.285421 0.0
+vt 0.628024 0.333794 0.0
+vt 0.652523 0.285421 0.0
+vt 0.655368 0.333937 0.0
+vt 0.601924 0.333665 0.0
+vt 0.599396 0.285149 0.0
+vt 0.625180 0.285278 0.0
+vt 0.601924 0.333665 0.0
+vt 0.625180 0.285278 0.0
+vt 0.628024 0.333794 0.0
+vt 0.575977 0.334255 0.0
+vt 0.576619 0.285739 0.0
+vt 0.601924 0.333665 0.0
+vt 0.576619 0.285739 0.0
+vt 0.599396 0.285149 0.0
+vt 0.601924 0.333665 0.0
+vt 0.655368 0.333937 0.0
+vt 0.652523 0.285421 0.0
+vt 0.679751 0.285500 0.0
+vt 0.655368 0.333937 0.0
+vt 0.679751 0.285500 0.0
+vt 0.679508 0.334015 0.0
+vt 0.509573 0.382914 0.0
+vt 0.508235 0.333991 0.0
+vt 0.543548 0.334133 0.0
+vt 0.509573 0.382914 0.0
+vt 0.543548 0.334133 0.0
+vt 0.543654 0.383056 0.0
+vt 0.543654 0.383056 0.0
+vt 0.543548 0.334133 0.0
+vt 0.575310 0.383178 0.0
+vt 0.543548 0.334133 0.0
+vt 0.575977 0.334255 0.0
+vt 0.575310 0.383178 0.0
+vt 0.678390 0.382939 0.0
+vt 0.679508 0.334015 0.0
+vt 0.700465 0.382633 0.0
+vt 0.679508 0.334015 0.0
+vt 0.701550 0.333710 0.0
+vt 0.700465 0.382633 0.0
+vt 0.700465 0.382633 0.0
+vt 0.701550 0.333710 0.0
+vt 0.719716 0.382544 0.0
+vt 0.701550 0.333710 0.0
+vt 0.719834 0.333620 0.0
+vt 0.719716 0.382544 0.0
+vt 0.719716 0.382544 0.0
+vt 0.719834 0.333620 0.0
+vt 0.738112 0.333991 0.0
+vt 0.719716 0.382544 0.0
+vt 0.738112 0.333991 0.0
+vt 0.739450 0.382914 0.0
+vt 0.630071 0.382717 0.0
+vt 0.628024 0.333794 0.0
+vt 0.655368 0.333937 0.0
+vt 0.630071 0.382717 0.0
+vt 0.655368 0.333937 0.0
+vt 0.655515 0.382860 0.0
+vt 0.602306 0.382588 0.0
+vt 0.601924 0.333665 0.0
+vt 0.628024 0.333794 0.0
+vt 0.602306 0.382588 0.0
+vt 0.628024 0.333794 0.0
+vt 0.630071 0.382717 0.0
+vt 0.575310 0.383178 0.0
+vt 0.575977 0.334255 0.0
+vt 0.602306 0.382588 0.0
+vt 0.575977 0.334255 0.0
+vt 0.601924 0.333665 0.0
+vt 0.602306 0.382588 0.0
+vt 0.655515 0.382860 0.0
+vt 0.655368 0.333937 0.0
+vt 0.678390 0.382939 0.0
+vt 0.655368 0.333937 0.0
+vt 0.679508 0.334015 0.0
+vt 0.678390 0.382939 0.0
+vt 0.516437 0.430568 0.0
+vt 0.509573 0.382914 0.0
+vt 0.543654 0.383056 0.0
+vt 0.516437 0.430568 0.0
+vt 0.543654 0.383056 0.0
+vt 0.546654 0.430711 0.0
+vt 0.546654 0.430711 0.0
+vt 0.543654 0.383056 0.0
+vt 0.572872 0.430832 0.0
+vt 0.543654 0.383056 0.0
+vt 0.575310 0.383178 0.0
+vt 0.572872 0.430832 0.0
+vt 0.673445 0.430593 0.0
+vt 0.678390 0.382939 0.0
+vt 0.696582 0.430287 0.0
+vt 0.678390 0.382939 0.0
+vt 0.700465 0.382633 0.0
+vt 0.696582 0.430287 0.0
+vt 0.696582 0.430287 0.0
+vt 0.700465 0.382633 0.0
+vt 0.721560 0.430198 0.0
+vt 0.700465 0.382633 0.0
+vt 0.719716 0.382544 0.0
+vt 0.721560 0.430198 0.0
+vt 0.721560 0.430198 0.0
+vt 0.719716 0.382544 0.0
+vt 0.739450 0.382914 0.0
+vt 0.721560 0.430198 0.0
+vt 0.739450 0.382914 0.0
+vt 0.742545 0.430568 0.0
+vt 0.628723 0.430372 0.0
+vt 0.630071 0.382717 0.0
+vt 0.655515 0.382860 0.0
+vt 0.628723 0.430372 0.0
+vt 0.655515 0.382860 0.0
+vt 0.653698 0.430514 0.0
+vt 0.601261 0.430242 0.0
+vt 0.602306 0.382588 0.0
+vt 0.630071 0.382717 0.0
+vt 0.601261 0.430242 0.0
+vt 0.630071 0.382717 0.0
+vt 0.628723 0.430372 0.0
+vt 0.572872 0.430832 0.0
+vt 0.575310 0.383178 0.0
+vt 0.601261 0.430242 0.0
+vt 0.575310 0.383178 0.0
+vt 0.602306 0.382588 0.0
+vt 0.601261 0.430242 0.0
+vt 0.653698 0.430514 0.0
+vt 0.655515 0.382860 0.0
+vt 0.673445 0.430593 0.0
+vt 0.655515 0.382860 0.0
+vt 0.678390 0.382939 0.0
+vt 0.673445 0.430593 0.0
+vt 0.572503 0.477711 0.0
+vt 0.545219 0.480807 0.0
+vt 0.546654 0.430711 0.0
+vt 0.572503 0.477711 0.0
+vt 0.546654 0.430711 0.0
+vt 0.572872 0.430832 0.0
+vt 0.545219 0.480807 0.0
+vt 0.522656 0.481192 0.0
+vt 0.546654 0.430711 0.0
+vt 0.522656 0.481192 0.0
+vt 0.516437 0.430568 0.0
+vt 0.546654 0.430711 0.0
+vt 0.671815 0.480567 0.0
+vt 0.673445 0.430593 0.0
+vt 0.697658 0.476950 0.0
+vt 0.673445 0.430593 0.0
+vt 0.696582 0.430287 0.0
+vt 0.697658 0.476950 0.0
+vt 0.697658 0.476950 0.0
+vt 0.696582 0.430287 0.0
+vt 0.721560 0.430198 0.0
+vt 0.697658 0.476950 0.0
+vt 0.721560 0.430198 0.0
+vt 0.725240 0.475888 0.0
+vt 0.725240 0.475888 0.0
+vt 0.721560 0.430198 0.0
+vt 0.742545 0.430568 0.0
+vt 0.725240 0.475888 0.0
+vt 0.742545 0.430568 0.0
+vt 0.746380 0.481192 0.0
+vt 0.622847 0.477946 0.0
+vt 0.628723 0.430372 0.0
+vt 0.650258 0.479635 0.0
+vt 0.628723 0.430372 0.0
+vt 0.653698 0.430514 0.0
+vt 0.650258 0.479635 0.0
+vt 0.590768 0.476412 0.0
+vt 0.601261 0.430242 0.0
+vt 0.622847 0.477946 0.0
+vt 0.601261 0.430242 0.0
+vt 0.628723 0.430372 0.0
+vt 0.622847 0.477946 0.0
+vt 0.572503 0.477711 0.0
+vt 0.572872 0.430832 0.0
+vt 0.590768 0.476412 0.0
+vt 0.572872 0.430832 0.0
+vt 0.601261 0.430242 0.0
+vt 0.590768 0.476412 0.0
+vt 0.650258 0.479635 0.0
+vt 0.653698 0.430514 0.0
+vt 0.671815 0.480567 0.0
+vt 0.653698 0.430514 0.0
+vt 0.673445 0.430593 0.0
+vt 0.671815 0.480567 0.0
+vt 0.674322 0.526892 0.0
+vt 0.671815 0.480567 0.0
+vt 0.699464 0.523421 0.0
+vt 0.671815 0.480567 0.0
+vt 0.697658 0.476950 0.0
+vt 0.699464 0.523421 0.0
+vt 0.699464 0.523421 0.0
+vt 0.697658 0.476950 0.0
+vt 0.725240 0.475888 0.0
+vt 0.699464 0.523421 0.0
+vt 0.725240 0.475888 0.0
+vt 0.726568 0.522402 0.0
+vt 0.620834 0.524377 0.0
+vt 0.622847 0.477946 0.0
+vt 0.648075 0.525998 0.0
+vt 0.622847 0.477946 0.0
+vt 0.650258 0.479635 0.0
+vt 0.648075 0.525998 0.0
+vt 0.590713 0.519350 0.0
+vt 0.590768 0.476412 0.0
+vt 0.622847 0.477946 0.0
+vt 0.590713 0.519350 0.0
+vt 0.622847 0.477946 0.0
+vt 0.620834 0.524377 0.0
+vt 0.648075 0.525998 0.0
+vt 0.650258 0.479635 0.0
+vt 0.671815 0.480567 0.0
+vt 0.648075 0.525998 0.0
+vt 0.671815 0.480567 0.0
+vt 0.674322 0.526892 0.0
+vt 0.675378 0.581590 0.0
+vt 0.674322 0.526892 0.0
+vt 0.701301 0.579205 0.0
+vt 0.674322 0.526892 0.0
+vt 0.699464 0.523421 0.0
+vt 0.701301 0.579205 0.0
+vt 0.701301 0.579205 0.0
+vt 0.699464 0.523421 0.0
+vt 0.726568 0.522402 0.0
+vt 0.701301 0.579205 0.0
+vt 0.726568 0.522402 0.0
+vt 0.726148 0.579996 0.0
+vt 0.726148 0.579996 0.0
+vt 0.726568 0.522402 0.0
+vt 0.752120 0.547897 0.0
+vt 0.726148 0.579996 0.0
+vt 0.752120 0.547897 0.0
+vt 0.752618 0.580605 0.0
+vt 0.616876 0.580160 0.0
+vt 0.620834 0.524377 0.0
+vt 0.644002 0.580695 0.0
+vt 0.620834 0.524377 0.0
+vt 0.648075 0.525998 0.0
+vt 0.644002 0.580695 0.0
+vt 0.589809 0.577268 0.0
+vt 0.590713 0.519350 0.0
+vt 0.616876 0.580160 0.0
+vt 0.590713 0.519350 0.0
+vt 0.620834 0.524377 0.0
+vt 0.616876 0.580160 0.0
+vt 0.575860 0.575666 0.0
+vt 0.572927 0.530382 0.0
+vt 0.589809 0.577268 0.0
+vt 0.572927 0.530382 0.0
+vt 0.590713 0.519350 0.0
+vt 0.589809 0.577268 0.0
+vt 0.644002 0.580695 0.0
+vt 0.648075 0.525998 0.0
+vt 0.675378 0.581590 0.0
+vt 0.648075 0.525998 0.0
+vt 0.674322 0.526892 0.0
+vt 0.675378 0.581590 0.0
+vt 0.160310 0.298313 0.0
+vt 0.158017 0.254457 0.0
+vt 0.185356 0.296417 0.0
+vt 0.158017 0.254457 0.0
+vt 0.182392 0.252377 0.0
+vt 0.185356 0.296417 0.0
+vt 0.185356 0.296417 0.0
+vt 0.182392 0.252377 0.0
+vt 0.222164 0.291373 0.0
+vt 0.182392 0.252377 0.0
+vt 0.219930 0.253067 0.0
+vt 0.222164 0.291373 0.0
+vt 0.222164 0.291373 0.0
+vt 0.219930 0.253067 0.0
+vt 0.260710 0.288862 0.0
+vt 0.219930 0.253067 0.0
+vt 0.260710 0.253897 0.0
+vt 0.260710 0.288862 0.0
+vt 0.106956 0.298420 0.0
+vt 0.101969 0.253211 0.0
+vt 0.128516 0.253677 0.0
+vt 0.106956 0.298420 0.0
+vt 0.128516 0.253677 0.0
+vt 0.128537 0.297532 0.0
+vt 0.074248 0.300433 0.0
+vt 0.069481 0.250687 0.0
+vt 0.106956 0.298420 0.0
+vt 0.069481 0.250687 0.0
+vt 0.101969 0.253211 0.0
+vt 0.106956 0.298420 0.0
+vt 0.035075 0.301868 0.0
+vt 0.035075 0.249290 0.0
+vt 0.074248 0.300433 0.0
+vt 0.035075 0.249290 0.0
+vt 0.069481 0.250687 0.0
+vt 0.074248 0.300433 0.0
+vt 0.128537 0.297532 0.0
+vt 0.128516 0.253677 0.0
+vt 0.158017 0.254457 0.0
+vt 0.128537 0.297532 0.0
+vt 0.158017 0.254457 0.0
+vt 0.160310 0.298313 0.0
+vt 0.159272 0.340905 0.0
+vt 0.160310 0.298313 0.0
+vt 0.183832 0.336276 0.0
+vt 0.160310 0.298313 0.0
+vt 0.185356 0.296417 0.0
+vt 0.183832 0.336276 0.0
+vt 0.183832 0.336276 0.0
+vt 0.185356 0.296417 0.0
+vt 0.222950 0.331232 0.0
+vt 0.185356 0.296417 0.0
+vt 0.222164 0.291373 0.0
+vt 0.222950 0.331232 0.0
+vt 0.222950 0.331232 0.0
+vt 0.222164 0.291373 0.0
+vt 0.260710 0.325692 0.0
+vt 0.222164 0.291373 0.0
+vt 0.260710 0.288862 0.0
+vt 0.260710 0.325692 0.0
+vt 0.105010 0.343269 0.0
+vt 0.106956 0.298420 0.0
+vt 0.126861 0.340124 0.0
+vt 0.106956 0.298420 0.0
+vt 0.128537 0.297532 0.0
+vt 0.126861 0.340124 0.0
+vt 0.071980 0.344040 0.0
+vt 0.074248 0.300433 0.0
+vt 0.105010 0.343269 0.0
+vt 0.074248 0.300433 0.0
+vt 0.106956 0.298420 0.0
+vt 0.105010 0.343269 0.0
+vt 0.035075 0.345024 0.0
+vt 0.035075 0.301868 0.0
+vt 0.071980 0.344040 0.0
+vt 0.035075 0.301868 0.0
+vt 0.074248 0.300433 0.0
+vt 0.071980 0.344040 0.0
+vt 0.126861 0.340124 0.0
+vt 0.128537 0.297532 0.0
+vt 0.159272 0.340905 0.0
+vt 0.128537 0.297532 0.0
+vt 0.160310 0.298313 0.0
+vt 0.159272 0.340905 0.0
+vt 0.158884 0.377962 0.0
+vt 0.159272 0.340905 0.0
+vt 0.183832 0.336276 0.0
+vt 0.158884 0.377962 0.0
+vt 0.183832 0.336276 0.0
+vt 0.192312 0.381576 0.0
+vt 0.192312 0.381576 0.0
+vt 0.183832 0.336276 0.0
+vt 0.224526 0.368290 0.0
+vt 0.183832 0.336276 0.0
+vt 0.222950 0.331232 0.0
+vt 0.224526 0.368290 0.0
+vt 0.224526 0.368290 0.0
+vt 0.222950 0.331232 0.0
+vt 0.260710 0.362750 0.0
+vt 0.222950 0.331232 0.0
+vt 0.260710 0.325692 0.0
+vt 0.260710 0.362750 0.0
+vt 0.102624 0.381902 0.0
+vt 0.105010 0.343269 0.0
+vt 0.123038 0.377182 0.0
+vt 0.105010 0.343269 0.0
+vt 0.126861 0.340124 0.0
+vt 0.123038 0.377182 0.0
+vt 0.072700 0.383945 0.0
+vt 0.071980 0.344040 0.0
+vt 0.102624 0.381902 0.0
+vt 0.071980 0.344040 0.0
+vt 0.105010 0.343269 0.0
+vt 0.102624 0.381902 0.0
+vt 0.035075 0.384323 0.0
+vt 0.035075 0.345024 0.0
+vt 0.072700 0.383945 0.0
+vt 0.035075 0.345024 0.0
+vt 0.071980 0.344040 0.0
+vt 0.072700 0.383945 0.0
+vt 0.123038 0.377182 0.0
+vt 0.126861 0.340124 0.0
+vt 0.158884 0.377962 0.0
+vt 0.126861 0.340124 0.0
+vt 0.159272 0.340905 0.0
+vt 0.158884 0.377962 0.0
+vt 0.616996 0.664890 0.0
+vt 0.607231 0.666452 0.0
+vt 0.621179 0.655401 0.0
+vt 0.607231 0.666452 0.0
+vt 0.604994 0.657705 0.0
+vt 0.621179 0.655401 0.0
+vt 0.617082 0.679998 0.0
+vt 0.607466 0.678056 0.0
+vt 0.607231 0.666452 0.0
+vt 0.617082 0.679998 0.0
+vt 0.607231 0.666452 0.0
+vt 0.616996 0.664890 0.0
+vt 0.621478 0.688906 0.0
+vt 0.602342 0.684006 0.0
+vt 0.607466 0.678056 0.0
+vt 0.621478 0.688906 0.0
+vt 0.607466 0.678056 0.0
+vt 0.617082 0.679998 0.0
+vt 0.619698 0.882311 0.0
+vt 0.604719 0.881209 0.0
+vt 0.600872 0.886855 0.0
+vt 0.619698 0.882311 0.0
+vt 0.600872 0.886855 0.0
+vt 0.617720 0.889377 0.0
+vt 0.618976 0.868123 0.0
+vt 0.604134 0.869535 0.0
+vt 0.604719 0.881209 ...
[truncated message content] |
|
From: <tre...@us...> - 2007-11-03 23:35:36
|
Revision: 557
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=557&view=rev
Author: trevorolio
Date: 2007-11-03 16:35:40 -0700 (Sat, 03 Nov 2007)
Log Message:
-----------
Broke the load testing classes into a separate test package, added a way to load many spaces in addition to many users.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
Added Paths:
-----------
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultispaceTests.java
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultiuserTests.java
Removed Paths:
-------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/MultiuserTests.java
Deleted: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/MultiuserTests.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/MultiuserTests.java 2007-11-03 23:35:35 UTC (rev 556)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/MultiuserTests.java 2007-11-03 23:35:40 UTC (rev 557)
@@ -1,211 +0,0 @@
-package com.ogoglio.client;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Random;
-import java.util.Vector;
-
-import javax.media.j3d.Transform3D;
-import javax.vecmath.Vector3d;
-
-import com.ogoglio.client.model.SplinePath;
-import com.ogoglio.client.model.Thing;
-import com.ogoglio.client.model.User;
-import com.ogoglio.util.Log;
-import com.ogoglio.viewer.j3d.J3DSplinePath;
-
-public class MultiuserTests {
-
- private long spaceID = -1;
-
- private URI serviceURI = null;
-
- Vector robots = new Vector();
-
- Random random = new Random();
-
- public MultiuserTests(long spaceID, URI serviceURI) {
- this.spaceID = spaceID;
- this.serviceURI = serviceURI;
- }
-
- public synchronized void addRobot(Transform3D startPosition, boolean wander) throws IOException {
- UserRobot robot = new UserRobot(spaceID, serviceURI);
- robot.teleport(startPosition);
- robots.add(robot);
- if (wander) {
- robot.wander();
- }
- }
-
- private synchronized UserRobot[] getRobots() {
- return (UserRobot[]) robots.toArray(new UserRobot[0]);
- }
-
- public void cleanup() {
- UserRobot[] bots = getRobots();
- for (int i = 0; i < bots.length; i++) {
- bots[i].cleanup();
- }
- }
-
- private class UserRobot implements SpaceClient.Listener {
- SpaceClient spaceClient = null;
-
- WanderThread wanderThread = null;
-
- public UserRobot(long spaceID, URI serviceURI) throws IOException {
- String guestCookie = "guestRobot_Banger_Test_" + System.currentTimeMillis() + "_" + random.nextInt();
- if (guestCookie == null) {
- throw new IOException("Could not get a guest cookie");
- }
- spaceClient = new SpaceClient(spaceID, serviceURI, guestCookie, this);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- wanderThread = new WanderThread(this);
- }
-
- public void wander() {
- wanderThread.start();
- }
-
- public void cleanup() {
- if (spaceClient != null) {
- spaceClient.cleanup();
- }
- }
-
- public void teleport(Transform3D position) {
- spaceClient.viewpointMotionStopped(position);
- }
-
- public void disconnected() {
- Log.error("UserRobot was disconnected");
- }
-
- public void receivedChatMessage(String username, String message) {
- }
-
- public void receivedSpaceTransfer(URI link) {
- }
-
- public void receivedLink(String displayName, String link) {
- }
-
- public void receivedCommandFocusRequest() {
- }
-
- public void receivedBrowserMessage(long sourceThingID, String message) {
- }
-
- public void receivedContextMenuRequest(Thing thing,String shapeName, int x, int y,long nonce) {
- }
-
- public void receivedContextMenuData(long nonce, String errorIfAny, Vector contextMenu) {
- }
-
- public void contextItemChosen(Thing thing, long nonce, String id) {
- }
-
- public void receivedInfoPanel(long sourceThingID, String nonce) {
- }
-
- }
-
- private class WanderThread extends Thread {
- UserRobot robot = null;
-
- public WanderThread(UserRobot robot) {
- this.robot = robot;
- }
-
- public void run() {
- User user = robot.spaceClient.getSpace().getUser(robot.spaceClient.getUsername());
- while(user == null) {
- try {
- sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- user = robot.spaceClient.getSpace().getUser(robot.spaceClient.getUsername());
- }
- Vector3d homePosition = new Vector3d(Math.abs(random.nextInt()) % 10, 0, Math.abs(random.nextInt()) % 10);
- System.out.println("Home position " + homePosition);
- Transform3D userPosition = new Transform3D();
- userPosition.setTranslation(homePosition);
- boolean lastSpun = true;
- while(true) {
- if(random.nextBoolean() || random.nextBoolean()){
- userPosition.setTranslation(homePosition);
- robot.spaceClient.viewpointMotionStopped(userPosition);
- try {
- sleep(1000 + Math.abs((random.nextInt() % 5000)));
- } catch (InterruptedException e) {
- break;
- }
- } else if(lastSpun) {
- userPosition.rotY(random.nextFloat() % (2 * Math.PI));
- userPosition.setTranslation(homePosition);
- SplinePath path = J3DSplinePath.getSplinePath(userPosition, 1, 0, 0, 2);
- robot.spaceClient.viewpointMotionChanged(path);
- try {
- sleep(3000 + Math.abs((random.nextInt() % 6000)));
- } catch (InterruptedException e) {
- break;
- }
- lastSpun = false;
- } else {
- userPosition.setTranslation(homePosition);
- SplinePath path = J3DSplinePath.getSplinePath(userPosition, 0, 1, 0, 2);
- robot.spaceClient.viewpointMotionChanged(path);
- try {
- sleep(1000 + Math.abs((random.nextInt() % 6000)));
- } catch (InterruptedException e) {
- break;
- }
- lastSpun = true;
- }
- }
- }
- }
-
- public static void main(String[] args) {
- if (args.length != 3) {
- Log.error("usage: ... spaceID serviceURI numRobots");
- return;
- }
- MultiuserTests tests = null;
- try {
- //If you are going to run a test like this, these should be pulled from
- //the properties files....
- //String serviceURI = "http://127.0.0.1:8080/og/";
- //String spaceURI = "http://127.0.0.1:8080/og/space/1/";
-
- long spaceID = Long.parseLong(args[0]);
- URI serviceURI = new URI(args[1]);
- tests = new MultiuserTests(spaceID, serviceURI);
-
- int numRobots = Integer.parseInt(args[2]);
- Transform3D startPosition = new Transform3D();
- for (int i = 0; i < numRobots; i++) {
- startPosition.setTranslation(new Vector3d(0, 0, -10));
- tests.addRobot(startPosition, true);
- Log.test("Added robot " + (i + 1) + " of " + numRobots);
- Thread.sleep(1000);
- }
-
- Thread.sleep(500000000);
- } catch (Throwable e) {
- e.printStackTrace();
- System.exit(1);
- } finally {
- if (tests != null) {
- tests.cleanup();
- }
- }
- }
-
-}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-11-03 23:35:35 UTC (rev 556)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-11-03 23:35:40 UTC (rev 557)
@@ -82,10 +82,13 @@
private boolean complainedAboutMemory = false;
- public J3DDataManager(boolean loadAppearances, TemplateDataProvider templateDataProvider, BodyDataProvider bodyDataProvider) {
+ private boolean watchMemory = false;
+
+ public J3DDataManager(boolean loadAppearances, TemplateDataProvider templateDataProvider, BodyDataProvider bodyDataProvider, boolean watchMemory) {
this.loadAppearances = loadAppearances;
this.templateDataProvider = templateDataProvider;
this.bodyDataProvider = bodyDataProvider;
+ this.watchMemory = watchMemory;
}
public BufferedImage getBodyTexture(String username, long bodyConfigurationID) {
@@ -565,6 +568,9 @@
}
private boolean atMaxMemory() {
+ if(!watchMemory){
+ return false;
+ }
boolean atMax = getHeapRemaining() < MINIMUM_REMAINING_HEAP;
if (atMax) {
Runtime.getRuntime().runFinalization();
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-03 23:35:35 UTC (rev 556)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-03 23:35:40 UTC (rev 557)
@@ -121,7 +121,7 @@
this.username = username;
this.userInputListener = userInputListener;
this.offScreen = offScreen;
- this.dataManager = new J3DDataManager(!offScreen, templateDataProvider, bodyDataProvider);
+ this.dataManager = new J3DDataManager(!offScreen, templateDataProvider, bodyDataProvider, !offScreen);
setCapabilities(sceneRoot);
setCapabilities(usersGroup);
@@ -702,7 +702,6 @@
if (displayName.startsWith(WebConstants.GUEST_COOKIE_PREFIX)) {
displayName = J3DUserRenderable.convertGuestCookieToDisplayName(displayName);
}
- System.out.println("Setting name tag: " + displayName);
renderable.setNameTag(displayName);
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-11-03 23:35:35 UTC (rev 556)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-11-03 23:35:40 UTC (rev 557)
@@ -95,6 +95,7 @@
}
public void initBody(J3DBodyData bodyData, BufferedImage customSkin) {
+ System.out.println("INIT BODY: " + user + " bodyData: " + bodyData + " skin " + customSkin);
bodyGroup.removeAllChildren();
this.bodyData = bodyData;
skin = new SkinLoader(bodyData, user.getBodyConfiguration(), customSkin).generateSkin();
@@ -295,9 +296,6 @@
displayName = displayName.substring(WebConstants.GUEST_COOKIE_PREFIX.length() + 1);
StringBuffer result = new StringBuffer(WebConstants.GUEST_DISPLAY_NAME_PREFIX);
String[] tokens = displayName.split(Pattern.quote("_"));
- for (int i = 0; i < tokens.length; i++) {
- System.out.println("TOKEN " + tokens[i]);
- }
int startIndex = tokens.length > 3 ? 3 : 0;
for (int i = startIndex; i < tokens.length; i++) {
result.append(" " + tokens[i]);
Added: maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java
===================================================================
--- maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java (rev 0)
+++ maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java 2007-11-03 23:35:40 UTC (rev 557)
@@ -0,0 +1,129 @@
+package com.ogoglio.loadtest;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Random;
+import java.util.Vector;
+
+import javax.media.j3d.Transform3D;
+import javax.vecmath.Vector3d;
+
+import com.ogoglio.client.SpaceClient;
+import com.ogoglio.client.model.SplinePath;
+import com.ogoglio.client.model.Thing;
+import com.ogoglio.client.model.User;
+import com.ogoglio.util.Log;
+import com.ogoglio.viewer.j3d.J3DSplinePath;
+
+public class Bot implements SpaceClient.Listener {
+ SpaceClient spaceClient = null;
+
+ Random random = new Random();
+
+ WanderThread wanderThread = null;
+
+ public Bot(long spaceID, URI serviceURI) throws IOException {
+ String guestCookie = "guestRobot_Banger_Test_" + System.currentTimeMillis() + "_" + random.nextInt();
+ if (guestCookie == null) {
+ throw new IOException("Could not get a guest cookie");
+ }
+ spaceClient = new SpaceClient(spaceID, serviceURI, guestCookie, this);
+ }
+
+ public void wander() {
+ wanderThread = new WanderThread();
+ wanderThread.start();
+ }
+
+ public void cleanup() {
+ if (spaceClient != null) {
+ spaceClient.cleanup();
+ }
+ }
+
+ public void teleport(Transform3D position) {
+ spaceClient.viewpointMotionStopped(position);
+ }
+
+ public void disconnected() {
+ Log.error("UserRobot was disconnected");
+ }
+
+ public void receivedChatMessage(String username, String message) {
+ }
+
+ public void receivedSpaceTransfer(URI link) {
+ }
+
+ public void receivedLink(String displayName, String link) {
+ }
+
+ public void receivedCommandFocusRequest() {
+ }
+
+ public void receivedBrowserMessage(long sourceThingID, String message) {
+ }
+
+ public void receivedContextMenuRequest(Thing thing, String shapeName, int x, int y, long nonce) {
+ }
+
+ public void receivedContextMenuData(long nonce, String errorIfAny, Vector contextMenu) {
+ }
+
+ public void contextItemChosen(Thing thing, long nonce, String id) {
+ }
+
+ public void receivedInfoPanel(long sourceThingID, String nonce) {
+ }
+
+ private class WanderThread extends Thread {
+ public void run() {
+ User user = spaceClient.getSpace().getUser(spaceClient.getUsername());
+ while (user == null) {
+ try {
+ sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ user = spaceClient.getSpace().getUser(spaceClient.getUsername());
+ }
+ Vector3d homePosition = new Vector3d(Math.abs(random.nextInt()) % 10, 0, -30 + Math.abs(random.nextInt()) % 10);
+ Transform3D userPosition = new Transform3D();
+ userPosition.setTranslation(homePosition);
+ boolean lastSpun = true;
+ while (true) {
+ if (random.nextBoolean() || random.nextBoolean()) {
+ userPosition.setTranslation(homePosition);
+ spaceClient.viewpointMotionStopped(userPosition);
+ try {
+ sleep(1000 + Math.abs((random.nextInt() % 5000)));
+ } catch (InterruptedException e) {
+ break;
+ }
+ } else if (lastSpun) {
+ userPosition.rotY(random.nextFloat() % (2 * Math.PI));
+ userPosition.setTranslation(homePosition);
+ SplinePath path = J3DSplinePath.getSplinePath(userPosition, 1, 0, 0, 2);
+ spaceClient.viewpointMotionChanged(path);
+ try {
+ sleep(3000 + Math.abs((random.nextInt() % 6000)));
+ } catch (InterruptedException e) {
+ break;
+ }
+ lastSpun = false;
+ } else {
+ userPosition.setTranslation(homePosition);
+ SplinePath path = J3DSplinePath.getSplinePath(userPosition, 0, 1, 0, 2);
+ spaceClient.viewpointMotionChanged(path);
+ try {
+ sleep(1000 + Math.abs((random.nextInt() % 6000)));
+ } catch (InterruptedException e) {
+ break;
+ }
+ lastSpun = true;
+ }
+ }
+ }
+ }
+
+}
Added: maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultispaceTests.java
===================================================================
--- maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultispaceTests.java (rev 0)
+++ maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultispaceTests.java 2007-11-03 23:35:40 UTC (rev 557)
@@ -0,0 +1,67 @@
+package com.ogoglio.loadtest;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Vector;
+
+import com.ogoglio.util.Log;
+
+public class MultispaceTests {
+
+ private URI serviceURI = null;
+
+ private long lowerSpaceID = -1;
+
+ private long upperSpaceID = -1;
+
+ Vector bots = new Vector();
+
+ public MultispaceTests(URI serviceURI, long lowerSpaceID, long upperSpaceID) {
+ this.lowerSpaceID = lowerSpaceID;
+ this.upperSpaceID = upperSpaceID;
+ this.serviceURI = serviceURI;
+ if (lowerSpaceID >= upperSpaceID) {
+ throw new IllegalArgumentException("lower space ID must be less than upper space ID");
+ }
+ }
+
+ public void startTests() throws IOException {
+ for (long i = lowerSpaceID; i <= upperSpaceID; i++) {
+ try {
+ Bot bot = new Bot(i, serviceURI);
+ System.out.println("Adding bot to space " + i);
+ bots.add(bot);
+ } catch (IOException e) {
+ System.out.println("Skipping space " + i);
+ }
+ }
+ }
+
+ public void stopTests() {
+ Bot[] theBots = (Bot[]) bots.toArray(new Bot[0]);
+ for (int i = 0; i < theBots.length; i++) {
+ theBots[i].cleanup();
+ }
+ }
+
+ public static void main(String[] args) {
+ if (args.length != 3) {
+ Log.error("usage: ... serviceURI lowerSpaceID upperSpaceID");
+ return;
+ }
+
+ URI serviceURI = URI.create(args[0]);
+ long lowerSpaceID = Long.parseLong(args[1]);
+ long upperSpaceID = Long.parseLong(args[2]);
+
+ MultispaceTests tests = new MultispaceTests(serviceURI, lowerSpaceID, upperSpaceID);
+ try {
+ tests.startTests();
+ Thread.sleep(500000000);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+}
Copied: maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultiuserTests.java (from rev 549, maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/MultiuserTests.java)
===================================================================
--- maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultiuserTests.java (rev 0)
+++ maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/MultiuserTests.java 2007-11-03 23:35:40 UTC (rev 557)
@@ -0,0 +1,83 @@
+package com.ogoglio.loadtest;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Random;
+import java.util.Vector;
+
+import javax.media.j3d.Transform3D;
+import javax.vecmath.Vector3d;
+
+import com.ogoglio.client.SpaceClient;
+import com.ogoglio.client.SpaceClient.Listener;
+import com.ogoglio.client.model.SplinePath;
+import com.ogoglio.client.model.Thing;
+import com.ogoglio.client.model.User;
+import com.ogoglio.util.Log;
+import com.ogoglio.viewer.j3d.J3DSplinePath;
+
+public class MultiuserTests {
+
+ private long spaceID = -1;
+
+ private URI serviceURI = null;
+
+ Vector robots = new Vector();
+
+ public MultiuserTests(long spaceID, URI serviceURI) {
+ this.spaceID = spaceID;
+ this.serviceURI = serviceURI;
+ }
+
+ public synchronized void addRobot(Transform3D startPosition, boolean wander) throws IOException {
+ Bot robot = new Bot(spaceID, serviceURI);
+ robot.teleport(startPosition);
+ robots.add(robot);
+ if (wander) {
+ robot.wander();
+ }
+ }
+
+ private synchronized Bot[] getRobots() {
+ return (Bot[]) robots.toArray(new Bot[0]);
+ }
+
+ public void cleanup() {
+ Bot[] bots = getRobots();
+ for (int i = 0; i < bots.length; i++) {
+ bots[i].cleanup();
+ }
+ }
+
+ public static void main(String[] args) {
+ if (args.length != 3) {
+ Log.error("usage: ... spaceID serviceURI numRobots");
+ return;
+ }
+ MultiuserTests tests = null;
+ try {
+ long spaceID = Long.parseLong(args[0]);
+ URI serviceURI = new URI(args[1]);
+ tests = new MultiuserTests(spaceID, serviceURI);
+
+ int numRobots = Integer.parseInt(args[2]);
+ Transform3D startPosition = new Transform3D();
+ for (int i = 0; i < numRobots; i++) {
+ startPosition.setTranslation(new Vector3d(0, 0, -50));
+ tests.addRobot(startPosition, true);
+ Log.test("Added robot " + (i + 1) + " of " + numRobots);
+ Thread.sleep(1000);
+ }
+
+ Thread.sleep(500000000);
+ } catch (Throwable e) {
+ e.printStackTrace();
+ System.exit(1);
+ } finally {
+ if (tests != null) {
+ tests.cleanup();
+ }
+ }
+ }
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-03 23:35:30
|
Revision: 556
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=556&view=rev
Author: trevorolio
Date: 2007-11-03 16:35:35 -0700 (Sat, 03 Nov 2007)
Log Message:
-----------
Broke the load testing classes into a separate test package, added a way to load many spaces in addition to many users.
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java 2007-11-03 23:35:32 UTC (rev 555)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java 2007-11-03 23:35:35 UTC (rev 556)
@@ -168,13 +168,15 @@
}
}
- public synchronized void cleanup() {
+ public void cleanup() {
try {
- if (cleaned) {
- return;
+ synchronized (this) {
+ if (cleaned) {
+ return;
+ }
+ cleaned = true;
}
Log.info("Stopping" + (deleted ? " deleted" : "") + " space " + space.getSpaceID() + ": " + space.getDisplayName());
- cleaned = true;
renderer.stopRenderer();
scriptEngine.cleanup();
simThread.queue.close();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-03 23:35:28
|
Revision: 555
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=555&view=rev
Author: trevorolio
Date: 2007-11-03 16:35:32 -0700 (Sat, 03 Nov 2007)
Log Message:
-----------
Broke the load testing classes into a separate test package, added a way to load many spaces in addition to many users.
Modified Paths:
--------------
maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java
Modified: maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java
===================================================================
--- maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java 2007-11-01 18:27:22 UTC (rev 554)
+++ maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java 2007-11-03 23:35:32 UTC (rev 555)
@@ -377,7 +377,7 @@
webClient = new WebAPIClient(descriptor, authenticator, wire);
accountDoc = authenticator.getAccountDocument(true);
- dataManager = new J3DDataManager(true, new TemplateProvider(), new BodyProvider());
+ dataManager = new J3DDataManager(true, new TemplateProvider(), new BodyProvider(), true);
user = new SpacelessUser(accountDoc.getUsername(), webClient.getDefaultBodyConfiguration(accountDoc.getUsername()));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-01 18:27:19
|
Revision: 554
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=554&view=rev
Author: trevorolio
Date: 2007-11-01 11:27:22 -0700 (Thu, 01 Nov 2007)
Log Message:
-----------
Made the server send the right guest body ID for add user events.
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java 2007-11-01 17:27:12 UTC (rev 553)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java 2007-11-01 18:27:22 UTC (rev 554)
@@ -212,7 +212,7 @@
if(username.startsWith(WebConstants.GUEST_COOKIE_PREFIX)){ //fake up a configuration for our guests
Query bodyDataQuery = session.getNamedQuery(BODY_DATA);
BodyDataRecord[] bodyDataRecs = (BodyDataRecord[])bodyDataQuery.list().toArray(new BodyDataRecord[0]);
- BodyConfigurationDocument doc = new BodyConfigurationDocument(0, username, "Guest Body", bodyDataRecs[0].getBodyDataID(), null);
+ BodyConfigurationDocument doc = new BodyConfigurationDocument(0, username, "Guest Body", -1, null);
return doc;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-01 17:27:08
|
Revision: 553
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=553&view=rev
Author: trevorolio
Date: 2007-11-01 10:27:12 -0700 (Thu, 01 Nov 2007)
Log Message:
-----------
Added a separate guest body, in this case a simplified Mike with a matte black texture.
Modified Paths:
--------------
maven/trunk/ogoglio-bodies/pom.xml
Added Paths:
-----------
maven/trunk/ogoglio-bodies/ogoglio-body-guest/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/pom.xml
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/java/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/default.bvh
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/sit.bvh
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/walk.bvh
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/doc/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/doc/license.txt
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.smap
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/sourceArt/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/sourceArt/guest.blend
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/texture/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/texture/body.jpg
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/test/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/test/java/
maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/test/resources/
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/pom.xml
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-guest/pom.xml (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-guest/pom.xml 2007-11-01 17:27:12 UTC (rev 553)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>com.ogoglio</groupId>
+ <artifactId>ogoglio</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../ogoglio-bodies</relativePath>
+ </parent>
+
+ <groupId>com.ogoglio.body</groupId>
+ <artifactId>ogoglio-body-guest</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>false</filtering>
+ <includes>
+ <include>doc/*</include>
+ <include>animation/*</include>
+ <include>geometry/*</include>
+ <include>texture/*</include>
+ </includes>
+ <excludes>
+ <exclude>sourceArt</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ </build>
+
+ <dependencies></dependencies>
+</project>
+
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/default.bvh
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/default.bvh (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/default.bvh 2007-11-01 17:27:12 UTC (rev 553)
@@ -0,0 +1,130 @@
+HIERARCHY
+ROOT hip
+{
+ OFFSET 0.00 0.00 0.00
+ CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation
+ JOINT abdomen
+ {
+ OFFSET 0.000000 0.000000 0.000000
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT chest
+ {
+ OFFSET 0.000000 5.018152 -1.882228
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT neckDummy
+ {
+ OFFSET 0.000000 8.316447 0.784897
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ JOINT neck
+ {
+ OFFSET 0.000000 2.280413 -0.392801
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT head
+ {
+ OFFSET 0.000000 3.496879 0.529469
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT figureHair
+ {
+ OFFSET 0.000000 4.699570 0.720622
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET 0.000000 -6.419331 0.000000
+ }
+ }
+ }
+ }
+ }
+ JOINT lCollar
+ {
+ OFFSET 0.599237 8.316447 0.784897
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT lShldr
+ {
+ OFFSET 6.421198 0.010146 -0.332128
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ JOINT lForeArm
+ {
+ OFFSET 10.552783 0.025574 0.125508
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT lHand
+ {
+ OFFSET 11.035963 0.319619 0.041520
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET 10.353753 0.000000 0.000000
+ }
+ }
+ }
+ }
+ }
+ JOINT rCollar
+ {
+ OFFSET -0.599237 8.316447 0.784897
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT rShldr
+ {
+ OFFSET -6.421198 0.010146 -0.332128
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ JOINT rForeArm
+ {
+ OFFSET -10.552783 0.025574 0.125508
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT rHand
+ {
+ OFFSET -11.035963 0.319619 0.041520
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET -10.353753 0.000000 0.000000
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ JOINT lThigh
+ {
+ OFFSET 4.500466 -6.400484 -1.832696
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT lShin
+ {
+ OFFSET -1.359117 -18.918689 1.179887
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT lFoot
+ {
+ OFFSET -0.652380 -17.215186 -0.312137
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ End Site
+ {
+ OFFSET 0.000000 0.000000 10.353752
+ }
+ }
+ }
+ }
+ JOINT rThigh
+ {
+ OFFSET -4.500466 -6.400484 -1.832696
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT rShin
+ {
+ OFFSET 1.359117 -18.918689 1.179887
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT rFoot
+ {
+ OFFSET 0.652380 -17.215186 -0.312137
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ End Site
+ {
+ OFFSET 0.000000 0.000000 10.353752
+ }
+ }
+ }
+ }
+}
+MOTION
+Frames: 1
+Frame Time: 0.100000
+0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -70.106262 9.940849 15.968393 -22.598761 -9.338127 0.108572 5.976201 -0.065959 0.172336 -2.021920 5.690310 -0.063351 70.064301 -9.978495 15.953232 22.592319 9.326028 0.129803 -5.956460 0.082736 0.181256 -7.544341 3.962285 0.126597 15.837342 -3.291070 -0.872131 -8.576491 1.070768 -0.847483 -7.531943 -4.331991 0.100592 15.780110 3.271439 0.612621 -8.616927 -1.581442 0.945399
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/sit.bvh
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/sit.bvh (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/sit.bvh 2007-11-01 17:27:12 UTC (rev 553)
@@ -0,0 +1,179 @@
+HIERARCHY
+ROOT hip
+{
+ OFFSET 0.00 0.00 0.00
+ CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation
+ JOINT abdomen
+ {
+ OFFSET 0.000000 0.000000 0.000000
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT chest
+ {
+ OFFSET 0.000000 5.018152 -1.882228
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT neckDummy
+ {
+ OFFSET 0.000000 8.316447 0.784897
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ JOINT neck
+ {
+ OFFSET 0.000000 2.280413 -0.392801
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT head
+ {
+ OFFSET 0.000000 3.496879 0.529469
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT figureHair
+ {
+ OFFSET 0.000000 4.699570 0.720622
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET 0.000000 -6.419331 0.000000
+ }
+ }
+ }
+ }
+ }
+ JOINT lCollar
+ {
+ OFFSET 0.599237 8.316447 0.784897
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT lShldr
+ {
+ OFFSET 6.421198 0.010146 -0.332128
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ JOINT lForeArm
+ {
+ OFFSET 10.552783 0.025574 0.125508
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT lHand
+ {
+ OFFSET 11.035963 0.319619 0.041520
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET 10.353753 0.000000 0.000000
+ }
+ }
+ }
+ }
+ }
+ JOINT rCollar
+ {
+ OFFSET -0.599237 8.316447 0.784897
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT rShldr
+ {
+ OFFSET -6.421198 0.010146 -0.332128
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ JOINT rForeArm
+ {
+ OFFSET -10.552783 0.025574 0.125508
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT rHand
+ {
+ OFFSET -11.035963 0.319619 0.041520
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET -10.353753 0.000000 0.000000
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ JOINT lThigh
+ {
+ OFFSET 4.500466 -6.400484 -1.832696
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT lShin
+ {
+ OFFSET -1.359117 -18.918689 1.179887
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT lFoot
+ {
+ OFFSET -0.652380 -17.215186 -0.312137
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ End Site
+ {
+ OFFSET 0.000000 0.000000 10.353752
+ }
+ }
+ }
+ }
+ JOINT rThigh
+ {
+ OFFSET -4.500466 -6.400484 -1.832696
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT rShin
+ {
+ OFFSET 1.359117 -18.918689 1.179887
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT rFoot
+ {
+ OFFSET 0.652380 -17.215186 -0.312137
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ End Site
+ {
+ OFFSET 0.000000 0.000000 10.353752
+ }
+ }
+ }
+ }
+}
+MOTION
+Frames: 50
+Frame Time: 0.041667
+0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -70.100700 9.978770 15.991600 -22.515600 -9.303740 0.147736 5.969490 -0.173112 0.175734 -2.021920 5.690310 -0.063351 70.100700 -9.978770 15.991600 22.515600 9.303740 0.147736 -5.969490 0.173112 0.175734 -7.545480 4.001929 0.126583 15.872740 -3.319793 -0.839247 -8.608498 1.050494 -0.878046 -7.531943 -4.331991 0.100592 15.814292 3.299639 0.618600 -8.640055 -1.563356 0.936766
+-0.001136 42.047485 0.258350 0.015281 -0.160640 1.231823 -0.202867 -1.017794 5.550867 -0.022891 -2.631103 2.992019 0.000000 0.000000 0.000000 0.000000 0.000000 1.297549 3.800558 -1.201557 7.998749 0.000000 0.000000 0.000000 1.994514 -5.197196 -0.066307 -67.927406 9.117760 16.272688 -21.930227 -10.127905 0.184120 7.175318 0.005541 -0.197885 -2.073291 5.740149 -0.032077 69.997414 -10.220204 15.994469 22.056313 9.142480 0.185973 -6.503005 1.401555 -2.041011 -7.551804 4.214809 0.125835 15.585843 -3.309215 -0.808465 -8.337039 -0.217005 -0.943522 -7.072927 -4.077958 0.028241 15.140048 3.277331 0.570500 -8.423216 -2.749167 0.862214
+-0.002857 42.096840 0.286087 0.029094 -0.365053 2.705819 -0.405597 -2.258602 12.353542 -0.052194 -5.847550 6.673011 0.000000 0.000000 0.000000 0.000000 0.000000 2.867914 8.444941 -2.649465 17.763105 0.000000 0.000000 0.000000 2.026428 -4.493691 -0.053350 -65.288086 8.063235 16.616686 -21.241461 -11.135085 0.222496 8.258029 0.234520 -0.622607 -2.153154 5.878275 0.045403 70.024467 -10.651922 15.978795 21.412695 9.311210 0.253536 -6.883192 3.187223 -5.134254 -7.501410 4.496881 0.123082 15.118730 -3.299616 -0.766510 -7.970469 -1.727266 -1.048025 -6.452955 -3.748653 -0.055355 14.178856 3.239592 0.472283 -8.083669 -4.153584 0.781128
+-0.003286 42.109127 0.292991 0.061213 -0.535572 4.277362 -0.777409 -3.492378 18.982010 -0.075997 -9.012057 10.205709 0.000000 0.000000 0.000000 0.000000 0.000000 4.480512 13.028363 -4.157663 27.440105 0.000000 0.000000 0.000000 2.106382 -3.666201 -0.027852 -62.624863 7.033216 16.953691 -20.461637 -12.127282 0.283488 9.150728 0.488386 -1.057494 -2.251019 6.080780 0.156168 70.160461 -11.211857 15.948553 20.662586 9.747875 0.340776 -7.102841 5.307372 -8.863679 -7.733775 4.735919 0.120272 15.098766 -3.299485 -0.765173 -7.820042 -3.331604 -1.135538 -6.111829 -3.485498 -0.127818 13.752612 3.218626 0.442000 -8.054342 -5.678007 0.704172
+0.000000 42.014908 0.240040 0.140966 -0.588000 5.920680 -1.579400 -4.545870 24.255800 -0.081138 -11.618200 12.859500 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 16.840300 -5.638830 35.604698 0.000000 0.000000 0.000000 2.188578 -2.810312 -0.001600 -60.240200 6.206450 17.227100 -19.525499 -12.948100 0.400552 10.078557 0.751147 -1.508068 -2.352196 6.289758 0.270502 70.299858 -11.790388 15.917407 19.886646 10.196711 0.430919 -7.332713 7.500043 -13.019673 -8.672421 4.828678 0.146981 16.364857 -3.346981 -0.905014 -8.241468 -4.977678 -1.109998 -6.623362 -3.453089 -0.197466 14.911632 3.268945 0.563573 -8.767126 -7.294611 0.632392
+0.008106 41.758495 0.093278 0.286617 -0.465829 7.598319 -2.919785 -5.289261 27.298862 -0.058123 -13.293894 14.099704 0.000000 0.000000 0.000000 0.000000 0.000000 7.315878 19.311069 -7.011647 41.139530 0.000000 0.000000 0.000000 2.227221 -2.021616 0.013618 -58.374638 5.701050 17.393173 -18.427805 -13.479096 0.587695 11.266666 1.006811 -1.979855 -2.441995 6.447314 0.358690 70.337204 -12.277906 15.899037 19.165552 10.401958 0.507188 -7.743576 9.503284 -17.392633 -10.711632 4.735614 0.181811 19.500193 -3.476861 -1.197509 -9.489000 -6.637327 -0.951120 -8.415224 -3.777928 -0.249301 18.396254 3.414390 0.917017 -10.594095 -8.999483 0.561660
+0.016877 41.339180 -0.160993 0.472185 -0.223303 9.226099 -4.295254 -5.766469 28.452793 -0.012122 -14.204382 14.175374 0.000000 0.000000 0.000000 0.000000 0.000000 8.417012 20.434372 -8.218807 44.157990 0.000000 0.000000 0.000000 2.176512 -1.395702 0.006016 -57.021053 5.392597 17.459612 -17.403440 -13.753652 0.781114 12.940200 1.239383 -2.478377 -2.505727 6.495546 0.391018 70.166992 -12.564794 15.907110 18.579964 10.107853 0.552805 -8.506192 11.055137 -21.772951 -13.706823 4.490720 0.248237 24.247133 -3.662852 -1.674194 -11.342396 -8.183679 -0.657165 -11.571109 -4.258971 -0.275373 23.999399 3.634807 1.505209 -13.201004 -10.669835 0.315946
+0.020842 40.769993 -0.531403 0.660630 0.057650 10.708160 -5.049613 -6.064847 28.363611 0.048028 -14.649241 13.531502 0.000000 0.000000 0.000000 0.000000 0.000000 9.317108 20.344748 -9.209007 45.081150 0.000000 0.000000 0.000000 1.990654 -1.028158 -0.036195 -56.110439 5.096044 17.446981 -16.747332 -13.843108 0.897551 15.324302 1.432872 -3.009158 -2.528701 6.376553 0.337769 69.683716 -12.541431 15.955297 18.210548 9.058629 0.550996 -9.791324 11.893643 -25.951015 -17.437792 4.198074 0.338902 30.074774 -3.858332 -2.266191 -13.475947 -9.548857 -0.221030 -15.383269 -4.977664 -0.287406 30.727306 3.876024 2.184429 -16.246342 -12.078061 0.165571
+0.014530 40.063969 -1.026583 0.814910 0.295098 11.948647 -4.526672 -6.271750 27.677338 0.113491 -14.928055 12.613079 0.000000 0.000000 0.000000 0.000000 0.000000 10.029876 19.176733 -9.930942 44.330078 0.000000 0.000000 0.000000 1.623849 -1.014575 -0.124801 -55.573788 4.626344 17.375854 -16.754408 -13.818810 0.853750 18.644119 1.571285 -3.577721 -2.496229 6.032434 0.169230 68.781883 -12.098205 16.057272 18.137974 6.998525 0.484983 -11.769738 11.756850 -29.717213 -21.666656 3.954324 0.443313 36.503391 -4.044169 -2.934869 -15.638267 -10.672198 0.278965 -19.613991 -5.710900 -0.279835 37.803112 4.065731 2.911026 -19.196899 -13.162488 -0.046318
+-0.007528 39.234142 -1.655163 0.897985 0.407112 12.851700 -2.070240 -6.474530 27.040001 0.175430 -15.340400 11.865100 0.000000 0.000000 0.000000 0.000000 0.000000 10.569020 17.064877 -10.333308 42.325867 0.000000 0.000000 0.000000 1.030300 -1.450540 -0.271591 -55.342098 3.798450 17.266800 -17.719601 -13.752100 0.566455 23.124800 1.638630 -4.189590 -2.393620 5.405290 -0.144315 67.356003 -11.125500 16.226700 18.442900 3.671780 0.337990 -14.612200 10.382800 -32.861942 -26.143826 3.846021 0.554989 43.048153 -4.172040 -3.623220 -17.589991 -11.449199 0.840408 -23.938587 -6.463055 -0.274669 44.984058 4.191748 3.669371 -22.069221 -13.790672 -0.121726
+-0.050137 38.292961 -2.409089 0.882349 0.337312 13.353222 2.706291 -6.743101 26.934940 0.224199 -16.094496 11.606818 0.000000 0.000000 0.000000 0.000000 0.000000 10.948249 14.143720 -10.364807 39.489601 0.000000 0.000000 0.000000 0.198067 -2.374392 -0.480962 -55.373985 2.487314 17.137873 -19.762753 -13.696319 -0.000414 28.751705 1.681599 -4.830937 -2.211814 4.486124 -0.621754 65.330505 -9.567327 16.466475 19.172091 -1.036520 0.114412 -18.264462 7.752028 -35.175598 -30.707300 3.953771 0.675722 49.288216 -4.214429 -4.315293 -19.088308 -11.875370 1.386264 -28.477438 -6.873167 -0.220213 51.558327 4.208741 4.360595 -24.106689 -14.144130 -0.270036
+-0.115429 37.250546 -3.213563 0.778648 0.131524 13.516165 9.111165 -7.077611 27.194798 0.246917 -17.033125 11.654552 0.000000 0.000000 0.000000 0.000000 0.000000 11.181270 10.547808 -9.974133 36.242355 0.000000 0.000000 0.000000 -0.749360 -3.595456 -0.727751 -55.738575 0.807899 16.997055 -22.303387 -13.632792 -0.694226 34.551033 1.997627 -5.410524 -1.964272 3.461572 -1.238661 62.749615 -7.582217 16.736366 20.236719 -6.677859 -0.096668 -21.772221 4.815056 -36.448566 -35.223942 4.236428 0.764493 55.312519 -4.176326 -4.968762 -20.384064 -12.023439 1.903501 -32.657665 -7.230220 -0.219549 57.641293 4.117342 5.020196 -25.918390 -14.136715 -0.290269
+-0.204869 36.116421 -3.977106 0.607063 -0.138876 13.435247 16.183052 -7.460773 27.489546 0.229894 -17.907717 11.698886 0.000000 0.000000 0.000000 0.000000 0.000000 11.281791 6.411681 -9.109984 33.005203 0.000000 0.000000 0.000000 -1.654636 -4.865809 -0.979408 -56.532635 -1.064830 16.849812 -24.585958 -13.524848 -1.315175 39.309212 2.946833 -5.817761 -1.670083 2.567176 -1.959786 59.687500 -5.382332 16.985371 21.514063 -12.662883 -0.184997 -23.956169 2.764890 -36.471245 -39.669811 4.646955 0.772826 61.285667 -4.039305 -5.623230 -21.678022 -11.919246 2.350195 -37.009411 -7.279677 -0.227884 63.486649 3.918202 5.641013 -27.336681 -14.054149 -0.454885
+-0.319923 34.900127 -4.608232 0.387775 -0.402509 13.205188 22.960609 -7.875296 27.489159 0.159439 -18.469700 11.430408 0.000000 0.000000 0.000000 0.000000 0.000000 11.263515 1.869889 -7.721058 30.199228 0.000000 0.000000 0.000000 -2.360411 -5.937526 -1.203382 -57.852928 -2.955908 16.701603 -25.854912 -13.335809 -1.663455 41.812660 4.889338 -5.942060 -1.348339 2.038479 -2.749876 56.218346 -3.179836 17.162485 22.881397 -18.402214 -0.040321 -23.636997 2.794546 -35.034027 -43.965260 5.135311 0.690983 67.382362 -3.814714 -6.268446 -23.232658 -11.684981 2.697291 -41.309090 -7.166585 -0.281345 69.357353 3.652169 6.216343 -28.788540 -13.927116 -0.737134
+-0.462055 33.611195 -5.015463 0.140966 -0.588000 12.920700 28.482500 -8.303890 26.863600 0.021864 -18.470501 10.539700 0.000000 0.000000 0.000000 0.000000 0.000000 11.140156 -2.943030 -5.756050 28.245501 0.000000 0.000000 0.000000 -2.709340 -6.562680 -1.367120 -59.796200 -4.690370 16.557899 -25.354700 -13.029000 -1.539260 40.847801 8.185260 -5.672830 -1.018130 2.111020 -3.573680 52.416302 -1.186890 17.216700 24.216000 -23.306499 0.447615 -19.635401 6.097030 -31.927299 -48.061069 5.653193 0.479244 73.787239 -3.474089 -6.889403 -25.328661 -11.391047 2.863119 -45.139637 -7.147304 -0.481332 75.543465 3.301003 6.828876 -30.997875 -13.621574 -1.176313
+-0.625463 32.258106 -5.221559 -0.087118 -0.647162 12.685126 32.141991 -8.714515 25.368425 -0.278603 -17.744574 8.753790 0.000000 0.000000 0.000000 0.000000 0.000000 10.925414 -7.825219 -3.290900 27.354988 0.000000 0.000000 0.000000 -2.514160 -6.420678 -1.452255 -62.329395 -6.144660 16.428251 -23.208241 -12.761728 -0.993648 36.654705 12.391641 -4.982024 -0.749251 2.890534 -4.389220 48.485493 0.562473 17.124125 25.807608 -26.889833 1.483009 -11.844831 12.917302 -27.275766 -52.032818 6.121557 0.178778 80.399940 -3.065367 -7.491178 -27.786781 -11.096766 2.902039 -48.836628 -7.206628 -0.747539 82.045853 2.900582 7.426325 -33.690441 -13.261812 -1.793520
+-0.775271 30.845148 -5.706260 -0.145974 -0.624573 12.636305 34.750740 -9.016124 23.101532 -1.166061 -16.458477 5.945470 0.000000 0.000000 0.000000 0.000000 0.000000 10.632996 -12.305557 -0.910501 26.898216 0.000000 0.000000 0.000000 -1.467941 -4.900249 -1.497147 -64.900131 -7.400843 16.338558 -23.052319 -13.467224 -1.081142 35.288033 13.853205 -4.171755 -0.814312 3.963524 -5.127613 45.149837 2.746739 16.969330 29.595821 -29.080166 3.645842 -4.449783 19.708128 -22.541378 -56.329060 6.338910 0.136681 85.893959 -2.727632 -7.982375 -28.876787 -11.003044 3.166472 -53.101933 -7.461143 -0.796327 87.790771 2.519392 7.935912 -35.187824 -13.149985 -2.232794
+-0.869335 29.375566 -7.063550 0.140966 -0.588000 12.920700 37.474998 -9.102920 20.246401 -3.146690 -14.861800 2.023970 0.000000 0.000000 0.000000 0.000000 0.000000 10.276609 -15.845600 0.673007 26.035603 0.000000 0.000000 0.000000 0.766166 -1.317450 -1.554340 -66.826202 -8.592390 16.318800 -29.402201 -16.272699 -3.107130 44.256100 8.111580 -3.626680 -1.536630 4.786680 -5.713250 43.263199 6.222520 16.864000 37.932701 -29.908899 7.610040 -2.707540 21.974199 -19.520399 -62.393833 6.131525 0.781529 89.501648 -2.529813 -8.347482 -26.404787 -11.069010 4.096362 -59.449234 -8.153783 -0.226388 92.011993 2.216583 8.261917 -33.339851 -13.439254 -1.951319
+-0.872431 27.886549 -9.542672 0.660576 -0.585714 13.415488 40.882645 -8.875570 17.194075 -6.338554 -13.222828 -2.826497 0.000000 0.000000 0.000000 0.000000 0.000000 9.869966 -17.821077 1.014126 23.927561 0.000000 0.000000 0.000000 4.015821 4.340507 -1.644702 -67.609413 -9.885515 16.389240 -44.205246 -21.322229 -7.541314 66.079781 -6.626896 -3.621811 -3.034421 5.164068 -6.112218 43.356716 11.201074 16.894766 51.570087 -29.110842 13.215491 -9.210017 17.106630 -18.929438 -69.892052 5.336908 2.244351 90.224297 -2.607593 -8.505087 -19.621990 -10.779461 5.738407 -67.848671 -9.353822 1.057089 93.872597 2.023984 8.354570 -27.166733 -13.644540 -0.653342
+-0.777013 26.551064 -12.013938 0.140966 -0.588000 12.920700 43.148102 -8.260590 15.165800 -9.307310 -11.884600 -7.321860 0.000000 0.000000 0.000000 0.000000 0.000000 9.426769 -17.264400 0.733914 19.734501 0.000000 0.000000 0.000000 6.071980 9.401870 -1.662390 -67.487602 -11.577400 16.531200 -59.137402 -24.827400 -11.510700 83.330399 -21.497299 -3.993590 -4.605520 6.289250 -6.457390 44.670601 15.312300 17.048000 64.859100 -25.234400 16.966000 -15.887800 10.042100 -17.166401 -75.341019 4.843800 3.455750 90.097908 -2.695096 -8.565252 -13.262901 -9.457743 7.071873 -74.263962 -10.155553 2.081025 94.466759 1.933840 8.348231 -20.709200 -12.765933 0.540243
+-0.591852 25.530415 -13.328908 -2.455969 -0.557183 10.407695 42.380375 -7.136115 15.093898 -10.760098 -11.018998 -10.140150 0.000000 0.000000 0.000000 0.000000 0.000000 8.960727 -13.584900 0.557259 13.013932 0.000000 0.000000 0.000000 4.952104 11.254337 -1.507222 -66.857559 -13.857865 16.697147 -65.650581 -23.260971 -12.243420 79.201653 -27.589514 -4.296614 -5.578798 9.128095 -6.860391 46.224689 16.194149 17.270897 72.147560 -17.503981 15.621323 -14.526196 6.287201 -10.536071 -76.707176 5.707410 3.380951 92.164139 -2.501134 -8.704925 -11.614241 -7.263399 7.239071 -75.908676 -9.556920 1.998037 95.644653 1.852712 8.464150 -17.665529 -10.838728 0.539092
+-0.363304 24.803457 -13.643139 -6.074385 -0.501732 6.610309 38.820499 -5.160920 15.924700 -11.522500 -10.038500 -10.907800 0.000000 0.000000 0.000000 0.000000 0.000000 8.485547 -8.042975 0.557812 4.911759 0.000000 0.000000 0.000000 1.616479 10.208116 -1.228365 -66.015770 -16.356316 16.763041 -64.572441 -18.073032 -10.714931 59.327023 -26.471737 -3.396677 -6.227700 12.346200 -7.181090 47.448299 14.098300 17.454201 74.171303 -9.034440 10.301300 -6.990950 6.082470 0.710524 -75.496025 6.961439 2.244997 95.905380 -2.133769 -8.915996 -13.544906 -4.234988 6.245570 -74.717163 -8.556355 1.092098 97.846397 1.747047 8.680337 -17.445347 -7.904090 -0.618339
+-0.147123 24.303423 -13.438188 -9.134972 -0.441656 2.702975 33.474945 -2.307904 16.147840 -12.606924 -8.502589 -9.806231 0.000000 0.000000 0.000000 0.000000 0.000000 8.014936 -2.361760 0.646416 -3.029062 0.000000 0.000000 0.000000 -2.238928 7.304027 -0.912318 -65.233643 -18.562061 16.585714 -59.074524 -11.957973 -8.837513 34.949783 -22.331715 0.012631 -6.877466 14.308359 -7.263671 48.239124 10.141443 17.425304 73.165558 -3.010855 3.229143 2.332134 8.351938 15.335871 -73.571877 7.398752 0.799846 99.652397 -1.722067 -9.104954 -16.761017 -0.476882 4.617184 -72.896591 -8.194424 -0.132631 100.280342 1.614837 8.934370 -18.506849 -4.307328 -2.469582
+0.000939 23.963556 -13.195612 -10.058400 -0.396959 -0.139853 28.280100 -0.025860 14.412100 -13.654600 -7.318210 -8.288430 0.000000 0.000000 0.000000 0.000000 0.000000 7.562603 1.735580 0.733914 -9.265530 0.000000 0.000000 0.000000 -4.918130 3.582900 -0.645584 -64.782600 -19.964399 16.021999 -52.328400 -7.610210 -8.523450 17.313299 -19.357201 7.237720 -7.115950 14.476300 -7.141320 49.958801 6.286670 16.814600 70.975098 0.990960 -3.318360 9.057210 12.019637 32.102402 -73.282913 7.460052 -0.364895 101.900253 -1.486730 -9.208735 -18.714811 2.437124 3.106550 -72.886467 -8.456903 -1.185964 101.642441 1.543463 9.101422 -18.670393 -1.253969 -4.131649
+0.043469 23.726555 -13.278124 -7.926306 -0.381788 -1.099397 24.939623 0.396672 9.992074 -14.115564 -7.321980 -7.730533 0.000000 0.000000 0.000000 0.000000 0.000000 7.142253 2.971139 0.751940 -12.647152 0.000000 0.000000 0.000000 -5.233160 -0.038699 -0.496564 -64.868721 -20.131510 15.157438 -47.100723 -6.850621 -10.608710 14.206190 -20.386114 18.689032 -6.521918 12.949107 -6.930665 53.784458 4.296818 15.571449 69.107430 4.158430 -7.350912 9.454207 16.009592 48.685352 -76.245377 7.782739 -0.699248 101.753265 -1.486786 -9.210054 -17.797413 3.157538 2.584072 -75.786819 -8.310682 -1.659614 101.088631 1.648746 9.118819 -17.210026 -0.491356 -4.751955
+0.016426 23.572933 -13.573064 -4.464168 -0.386842 -0.779546 23.296490 -0.211947 4.506510 -14.046229 -7.721753 -7.929712 0.000000 0.000000 0.000000 0.000000 0.000000 6.767593 1.848017 0.715297 -13.593440 0.000000 0.000000 0.000000 -4.028121 -3.141241 -0.461256 -65.436722 -18.947090 14.992432 -44.538521 -8.005962 -11.623996 19.598129 -22.857027 31.193110 -5.375175 11.278348 -6.893106 58.691280 4.287345 15.118093 68.111450 7.122568 -8.077724 2.416154 19.245832 58.411160 -80.572365 7.762822 -0.495983 100.244797 -1.633601 -9.132307 -15.388410 2.853946 2.768085 -80.085068 -8.467069 -1.709246 99.736031 1.785352 9.043935 -15.031303 -0.734781 -4.628127
+-0.025891 23.492668 -13.848934 -2.058400 -0.396959 -0.139853 22.728500 -0.494140 0.160156 -13.654600 -7.318200 -8.288400 0.000000 0.000000 0.000000 0.000000 0.000000 6.452331 -0.685447 0.659579 -12.916411 0.000000 0.000000 0.000000 -2.655120 -5.429470 -0.517557 -66.365997 -16.373699 16.756100 -45.383900 -8.529470 -7.023700 24.004101 -22.858700 40.680599 -4.130780 11.378700 -7.326240 63.104000 5.961870 17.245001 68.296402 10.375300 -5.007880 -12.508200 20.652399 53.519100 -83.582695 7.636213 -0.186658 98.951874 -1.798568 -9.068689 -13.419610 2.309466 3.084131 -83.092674 -8.671844 -1.606984 98.685860 1.894741 8.962910 -13.441343 -1.225798 -4.382638
+-0.041389 23.472105 -13.933654 -2.355244 -0.400345 0.073362 22.663372 0.302029 -1.410207 -12.763442 -5.288787 -8.358323 0.000000 0.000000 0.000000 0.000000 0.000000 6.210174 -3.680905 0.620380 -11.428075 0.000000 0.000000 0.000000 -2.146618 -6.714589 -0.635816 -67.489677 -12.660131 21.005629 -49.690632 -6.675766 5.520680 20.655518 -17.934645 44.302353 -3.244061 14.340141 -8.337900 65.804955 8.829684 22.809927 68.480186 13.839926 1.976072 -29.558062 18.727209 34.185310 -83.444283 7.587450 -0.121380 98.962868 -1.827669 -9.074026 -13.260627 2.131085 3.186827 -82.958527 -8.769772 -1.578251 98.724609 1.903192 8.986553 -13.307418 -1.393921 -4.351883
+-0.036799 23.483084 -13.892812 -4.040154 -0.398677 -0.033274 22.728500 0.505900 -0.839800 -9.654600 -2.318200 -8.288400 0.000000 0.000000 0.000000 0.000000 0.000000 6.054828 -6.190008 0.633294 -9.940445 0.000000 0.000000 0.000000 -2.256451 -7.233702 -0.756190 -68.455856 -9.200068 25.610476 -54.759129 -3.905049 19.469149 13.649653 -11.447479 44.090389 -3.171410 17.953800 -9.276880 67.007080 11.622759 28.939779 61.515598 15.165300 11.497700 -18.124701 10.263800 32.333698 -81.643768 7.596544 -0.201949 99.672813 -1.750242 -9.120222 -14.112836 2.247701 3.139502 -81.158745 -8.759913 -1.593118 99.357018 1.844714 9.036206 -14.052436 -1.301064 -4.417953
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.728500 -0.494100 0.160200 -5.654600 -0.318199 -8.288400 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.264420 0.733914 -9.265530 0.000000 0.000000 0.000000 -2.418800 -7.330390 -0.811291 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064671 9.800200 -8.214560 43.297001 -3.707600 19.509300 -9.539490 67.280998 12.878750 31.828800 49.938904 13.843800 18.433800 18.058350 -0.060270 55.341801 -80.529556 7.606574 -0.276037 100.080345 -1.682014 -9.139359 -14.624531 2.390794 3.050730 -80.036728 -8.740204 -1.627717 99.804337 1.786962 9.054121 -14.602128 -1.177025 -4.467085
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.796249 -0.312243 0.229236 -5.652178 -0.470930 -8.290670 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.319018 0.942366 -9.268350 0.000000 0.000000 0.000000 -2.418800 -7.330391 -0.811292 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064674 9.800200 -8.214563 43.297001 -3.707600 19.509300 -9.539491 67.280998 12.878745 31.828800 49.938904 13.843800 18.433800 18.058344 -0.060273 55.341801 -80.529556 7.606574 -0.276037 99.948349 -1.583841 -9.135448 -14.457079 2.505192 2.925035 -80.036728 -8.740204 -1.627717 99.899406 1.728640 9.056458 -14.764675 -1.100068 -4.439228
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.864000 -0.130386 0.298271 -5.649756 -0.623661 -8.292941 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.373616 1.150817 -9.271170 0.000000 0.000000 0.000000 -2.418800 -7.330392 -0.811293 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064676 9.800200 -8.214567 43.297001 -3.707600 19.509300 -9.539492 67.280998 12.878740 31.828800 49.938904 13.843800 18.433800 18.058338 -0.060276 55.341801 -80.529556 7.606574 -0.276037 99.816490 -1.496572 -9.144343 -14.295455 2.634761 2.830058 -80.036728 -8.740204 -1.627717 99.994888 1.679874 9.059991 -14.916922 -1.023317 -4.411181
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.931751 0.051471 0.367307 -5.647335 -0.776392 -8.295212 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.428214 1.359269 -9.273990 0.000000 0.000000 0.000000 -2.418800 -7.330393 -0.811294 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064678 9.800200 -8.214571 43.297001 -3.707600 19.509300 -9.539493 67.280998 12.878736 31.828800 49.938904 13.843800 18.433800 18.058334 -0.060279 55.341801 -80.655678 7.296944 -0.294510 99.830833 -1.392337 -9.151498 -14.162417 3.059085 2.733469 -80.036728 -8.740204 -1.627717 100.089966 1.621550 9.061905 -15.078267 -0.949209 -4.363899
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.999500 0.233328 0.436343 -5.644913 -0.929123 -8.297482 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.482811 1.567720 -9.276810 0.000000 0.000000 0.000000 -2.418800 -7.330394 -0.811295 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064682 9.800200 -8.214575 43.297001 -3.707600 19.509300 -9.539494 67.280998 12.878731 31.828800 49.938904 13.843800 18.433800 18.058329 -0.060282 55.341801 -80.684761 7.184387 -0.293389 99.884262 -1.286162 -9.160164 -14.151802 3.289547 2.634885 -79.975204 -8.555390 -1.625069 100.048653 1.587265 9.074759 -15.158584 -1.068617 -4.351100
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.067249 0.415185 0.505379 -5.642490 -1.081855 -8.299753 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.537410 1.776172 -9.279630 0.000000 0.000000 0.000000 -2.418800 -7.330395 -0.811295 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064686 9.800200 -8.214579 43.297001 -3.707600 19.509300 -9.539495 67.280998 12.878726 31.828800 49.938904 13.843800 18.433800 18.058323 -0.060285 55.341801 -80.655884 7.065650 -0.297986 99.908813 -1.189191 -9.166738 -14.178167 3.518813 2.556376 -79.944778 -8.463006 -1.618956 99.968964 1.551501 9.063015 -15.176853 -1.087549 -4.304982
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.135000 0.597042 0.574414 -5.640069 -1.234586 -8.302025 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.592008 1.984624 -9.282450 0.000000 0.000000 0.000000 -2.418800 -7.330396 -0.811296 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064688 9.800200 -8.214582 43.297001 -3.707600 19.509300 -9.539495 67.280998 12.878721 31.828800 49.938904 13.843800 18.433800 18.058319 -0.060288 55.341801 -80.694763 6.948860 -0.293453 99.864395 -1.083336 -9.174717 -14.068148 3.754606 2.445470 -79.920784 -8.406898 -1.614661 99.976341 1.504053 9.066916 -15.275945 -1.070508 -4.274305
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.202751 0.778899 0.643450 -5.637647 -1.387317 -8.304296 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.646605 2.193075 -9.285270 0.000000 0.000000 0.000000 -2.418800 -7.330397 -0.811297 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064690 9.800200 -8.214586 43.297001 -3.707600 19.509300 -9.539496 67.280998 12.878716 31.828800 49.938904 13.843800 18.433800 18.058315 -0.060291 55.341801 -80.723465 6.845056 -0.299076 99.840591 -0.988943 -9.169375 -13.973420 3.955399 2.359292 -79.965065 -8.345485 -1.622173 100.022240 1.433999 9.058948 -15.345372 -1.057141 -4.224343
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.270500 0.960756 0.712486 -5.635224 -1.540048 -8.306567 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.701204 2.401527 -9.288090 0.000000 0.000000 0.000000 -2.418800 -7.330398 -0.811298 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064693 9.800200 -8.214591 43.297001 -3.707600 19.509300 -9.539497 67.280998 12.878711 31.828800 49.938904 13.843800 18.433800 18.058310 -0.060294 55.341801 -80.683945 6.726146 -0.294566 99.884666 -0.883093 -9.168114 -14.029733 4.186086 2.272666 -79.959534 -8.302510 -1.617384 99.952438 1.411240 9.063025 -15.346992 -1.032802 -4.191750
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.338249 1.142613 0.781521 -5.632802 -1.692779 -8.308838 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.755802 2.609978 -9.290910 0.000000 0.000000 0.000000 -2.418800 -7.330399 -0.811299 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064697 9.800200 -8.214596 43.297001 -3.707600 19.509300 -9.539499 67.280998 12.878706 31.828800 49.938904 13.843800 18.433800 18.058304 -0.060297 55.341801 -80.702011 6.623090 -0.290389 99.850136 -0.781133 -9.181367 -13.942264 4.408222 2.169586 -79.944435 -8.252051 -1.616698 99.978989 1.363760 9.078614 -15.435973 -1.019263 -4.161382
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.406000 1.324470 0.850557 -5.630380 -1.845510 -8.311110 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.810400 2.818430 -9.293730 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.710396 6.513686 -0.282871 99.825333 -0.674134 -9.190516 -13.881958 4.629443 2.096669 -80.007927 -8.202291 -1.616939 99.918793 1.317311 9.056993 -15.388410 -0.997557 -4.118979
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.344410 1.159146 0.787797 -5.632582 -1.706663 -8.309045 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.760765 2.628929 -9.291166 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.693199 6.612239 -0.291641 99.839989 -0.772778 -9.180444 -13.946154 4.428677 2.172705 -80.003632 -8.245581 -1.621523 99.920021 1.346951 9.062195 -15.328702 -1.012920 -4.140097
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.282820 0.993821 0.725038 -5.634784 -1.567817 -8.306980 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.711130 2.439427 -9.288602 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.685219 6.703459 -0.286528 99.863335 -0.854945 -9.181154 -14.003063 4.241853 2.258799 -79.950783 -8.291809 -1.616029 99.952049 1.402634 9.062596 -15.367139 -1.024083 -4.190748
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.221230 0.828497 0.662278 -5.636986 -1.428970 -8.304915 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.661495 2.249926 -9.286037 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.667908 6.803130 -0.296163 99.878059 -0.955041 -9.172701 -14.061670 4.039531 2.333687 -79.956932 -8.337340 -1.609672 99.934944 1.455034 9.063181 -15.277460 -1.047969 -4.212713
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.159639 0.663172 0.599518 -5.639188 -1.290124 -8.302851 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.611860 2.060424 -9.283474 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.707603 6.914013 -0.294665 99.863510 -1.050708 -9.156631 -14.042909 3.811841 2.412342 -79.990997 -8.387027 -1.618792 99.927116 1.486313 9.050206 -15.169321 -1.054980 -4.241894
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.098049 0.497848 0.536759 -5.641390 -1.151277 -8.300785 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.562225 1.870923 -9.280910 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.689377 7.018662 -0.298866 99.809319 -1.149674 -9.158791 -14.033837 3.613069 2.495564 -79.937370 -8.433875 -1.622267 99.967369 1.517037 9.061286 -15.207257 -1.072707 -4.283732
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 23.036459 0.332523 0.473999 -5.643592 -1.012431 -8.298720 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.512590 1.681422 -9.278346 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.709412 7.129354 -0.297808 99.871765 -1.232692 -9.164733 -14.105558 3.402184 2.588746 -79.952232 -8.490499 -1.616791 100.009155 1.569074 9.058808 -15.177814 -1.073583 -4.322686
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.974869 0.167199 0.411239 -5.645794 -0.873584 -8.296656 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.462955 1.491920 -9.275782 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.671539 7.231766 -0.300439 99.847214 -1.330432 -9.159117 -14.143842 3.191097 2.671165 -79.983688 -8.573734 -1.620535 100.030708 1.614877 9.066291 -15.109808 -1.065939 -4.360067
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.913279 0.001874 0.348479 -5.647996 -0.734738 -8.294590 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.413321 1.302419 -9.273218 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.642693 7.334507 -0.294028 99.842178 -1.424945 -9.151748 -14.196482 2.991758 2.755060 -80.036728 -8.740204 -1.627717 100.061119 1.631236 9.060006 -15.028068 -0.969684 -4.375781
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.851688 -0.163450 0.285720 -5.650198 -0.595891 -8.292524 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.363686 1.112917 -9.270655 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.529556 7.606574 -0.276037 99.836754 -1.506150 -9.138556 -14.321285 2.601479 2.836400 -80.036728 -8.740204 -1.627717 99.975456 1.689817 9.069006 -14.886281 -1.042104 -4.423136
+-0.031061 23.493807 -13.851418 -5.058400 -0.397000 -0.139900 22.790100 -0.328775 0.222960 -5.652400 -0.457045 -8.290460 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 -7.314050 0.923416 -9.268090 0.000000 0.000000 0.000000 -2.418800 -7.330400 -0.811300 -68.866402 -7.673400 27.768200 -57.201500 -2.478900 26.064699 9.800200 -8.214600 43.297001 -3.707600 19.509300 -9.539500 67.280998 12.878700 31.828800 49.938900 13.843800 18.433800 18.058300 -0.060300 55.341801 -80.529556 7.606574 -0.276037 99.958511 -1.593631 -9.138300 -14.467773 2.500639 2.944140 -80.036728 -8.740204 -1.627717 99.890060 1.738380 9.056893 -14.745159 -1.099041 -4.448681
Property changes on: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/sit.bvh
___________________________________________________________________
Name: svn:executable
+ *
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/walk.bvh
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/walk.bvh (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/animation/walk.bvh 2007-11-01 17:27:12 UTC (rev 553)
@@ -0,0 +1,143 @@
+HIERARCHY
+ROOT hip
+{
+ OFFSET 0.00 0.00 0.00
+ CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation
+ JOINT abdomen
+ {
+ OFFSET 0.000000 0.000000 0.000000
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT chest
+ {
+ OFFSET 0.000000 5.018152 -1.882228
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT neckDummy
+ {
+ OFFSET 0.000000 8.316447 0.784897
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ JOINT neck
+ {
+ OFFSET 0.000000 2.280413 -0.392801
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT head
+ {
+ OFFSET 0.000000 3.496879 0.529469
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT figureHair
+ {
+ OFFSET 0.000000 4.699570 0.720622
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET 0.000000 -6.419331 0.000000
+ }
+ }
+ }
+ }
+ }
+ JOINT lCollar
+ {
+ OFFSET 0.599237 8.316447 0.784897
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT lShldr
+ {
+ OFFSET 6.421198 0.010146 -0.332128
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ JOINT lForeArm
+ {
+ OFFSET 10.552783 0.025574 0.125508
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT lHand
+ {
+ OFFSET 11.035963 0.319619 0.041520
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET 10.353753 0.000000 0.000000
+ }
+ }
+ }
+ }
+ }
+ JOINT rCollar
+ {
+ OFFSET -0.599237 8.316447 0.784897
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT rShldr
+ {
+ OFFSET -6.421198 0.010146 -0.332128
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ JOINT rForeArm
+ {
+ OFFSET -10.552783 0.025574 0.125508
+ CHANNELS 3 Yrotation Zrotation Xrotation
+ JOINT rHand
+ {
+ OFFSET -11.035963 0.319619 0.041520
+ CHANNELS 3 Zrotation Yrotation Xrotation
+ End Site
+ {
+ OFFSET -10.353753 0.000000 0.000000
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ JOINT lThigh
+ {
+ OFFSET 4.500466 -6.400484 -1.832696
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT lShin
+ {
+ OFFSET -1.359117 -18.918689 1.179887
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT lFoot
+ {
+ OFFSET -0.652380 -17.215186 -0.312137
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ End Site
+ {
+ OFFSET 0.000000 0.000000 10.353752
+ }
+ }
+ }
+ }
+ JOINT rThigh
+ {
+ OFFSET -4.500466 -6.400484 -1.832696
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT rShin
+ {
+ OFFSET 1.359117 -18.918689 1.179887
+ CHANNELS 3 Xrotation Zrotation Yrotation
+ JOINT rFoot
+ {
+ OFFSET 0.652380 -17.215186 -0.312137
+ CHANNELS 3 Xrotation Yrotation Zrotation
+ End Site
+ {
+ OFFSET 0.000000 0.000000 10.353752
+ }
+ }
+ }
+ }
+}
+MOTION
+Frames: 14
+Frame Time: 0.066667
+-0.025751 40.586620 2.968130 5.556919 0.000000 2.015870 -0.679723 1.014860 -1.052490 2.752000 0.638850 -7.299640 0.000000 0.000000 0.000000 0.407942 0.012259 -0.125621 5.754920 -1.457380 3.998490 0.000000 0.000000 0.000000 -9.241052 -2.655120 -8.994716 -71.740334 -11.761992 4.746030 -31.604246 0.001165 34.045898 -13.209469 -13.282380 0.089536 -5.574724 0.471018 -0.003654 73.497147 -23.637768 -7.243340 8.720032 0.116349 30.201418 6.934624 -2.351367 0.271411 19.708641 0.263537 -1.303549 16.376945 -5.436259 -0.534536 4.496281 1.015851 1.747118 -34.913624 -1.222353 -5.287092 -2.923005 1.339154 -2.612716 22.631870 -2.693362 0.441635
+-0.042716 39.998322 2.968130 5.983611 0.195238 2.305610 -0.907500 1.659612 -0.825557 3.170562 0.413939 -6.538830 0.000000 0.000000 0.000000 0.042751 0.359102 -0.204164 4.601790 -1.017530 3.147050 0.000000 0.000000 0.000000 -7.220732 -6.809920 -7.805324 -69.911514 -16.292000 9.884584 -30.286831 0.001165 34.526901 -12.666131 -12.662926 0.331903 -3.823218 3.579455 -1.197800 71.229912 -22.176136 -9.132231 8.934833 0.116349 27.588573 6.341005 -1.810122 0.088928 31.804970 -0.657304 -1.730517 2.618905 -2.443246 2.231949 21.055721 1.594669 -3.021200 -29.232765 -0.871606 -4.452437 -1.019926 1.464713 -1.719640 24.820795 -1.952116 -4.257692
+-0.049000 40.603870 2.968130 6.780290 0.351810 1.598240 -2.588980 1.606370 -0.606371 4.232220 0.109319 -4.063770 0.000000 0.000000 0.000000 -0.004632 0.082528 -0.092734 3.695360 -0.754448 1.973470 0.000000 0.000000 0.000000 -3.744470 -8.700970 -4.904962 -70.886101 -17.357700 9.929008 -27.660284 0.001165 35.161800 -11.806924 -10.875732 0.285265 2.176580 6.577632 -4.384020 70.634499 -18.152660 -9.667048 10.032651 0.116349 26.305099 7.008678 -1.223352 0.074780 -0.730503 0.428468 1.743937 54.347294 -4.835621 -1.074371 9.137504 5.289661 -3.020902 -30.705618 -0.868734 -4.818579 21.605469 1.171606 -0.034239 -1.272151 -1.886707 -7.032578
+-0.037075 41.810562 2.968130 7.296476 0.438710 -0.384793 -4.810570 0.717793 -0.479063 6.622445 -0.720518 0.217079 0.000000 0.000000 0.000000 -0.107271 -0.166920 0.020543 3.943000 -0.396601 0.249927 0.000000 0.000000 0.000000 0.513674 -7.977970 -1.134083 -74.425400 -13.281600 5.881170 -21.836599 0.001165 35.306301 -10.841126 -7.695415 0.267681 9.603888 7.048002 -9.243760 73.807510 -11.406500 -7.985020 13.655500 0.116349 26.980301 7.962735 -0.329182 -0.250100 -25.456684 1.331627 2.501022 73.946716 -3.461740 -1.227959 6.551764 9.393176 -2.179612 -21.037874 -0.078504 -4.612796 18.826389 1.075741 0.301105 -8.326876 -0.739504 -7.905264
+-0.049278 42.520454 2.968130 8.028471 0.438727 -2.183500 -5.438199 0.207261 -0.484243 7.701901 -0.949968 3.168510 0.000000 0.000000 0.000000 -0.088913 -0.029736 0.069249 4.540220 -0.260280 -2.275510 0.000000 0.000000 0.000000 2.874230 -2.376980 2.091650 -76.070900 -2.581600 0.745457 -16.126499 0.001165 34.865601 -9.942211 -3.643180 0.247649 14.103100 1.174088 -11.539000 76.153893 -2.965070 -5.198220 20.489672 0.116349 29.013399 9.230290 0.745239 0.228837 -38.033737 1.956252 2.239554 62.350563 -2.866381 -0.239753 8.452842 4.334472 0.655780 -7.289600 0.366645 -3.843508 1.867966 1.000802 -0.741712 -5.670934 1.476608 -7.036381
+-0.114791 42.307247 2.968130 7.389349 0.351858 -2.723740 -4.885140 -0.152601 -0.086374 6.676330 -0.990823 5.642550 0.000000 0.000000 0.000000 -0.081509 0.384691 0.167481 4.107840 0.611224 -3.806190 0.000000 0.000000 0.000000 4.723633 0.303047 3.157360 -76.516335 9.078669 -2.237584 -11.194500 0.001165 33.690437 -8.229190 -0.264951 0.350273 13.708600 -2.341550 -11.484700 76.444801 4.952410 -2.805780 23.664574 0.116349 31.163200 11.073913 3.243204 0.139668 -39.737446 0.943351 2.634595 37.038799 -0.007947 0.242163 3.952889 0.500314 0.637011 -2.884728 0.294582 -4.572917 14.900056 0.339312 0.546077 -12.464971 2.812716 -5.142097
+-0.113669 41.299294 2.968130 7.077470 0.195307 -3.103870 -2.569706 -0.587081 0.746072 4.264240 -0.920307 6.794440 0.000000 0.000000 0.000000 -0.065579 0.873253 0.332926 4.152214 1.027240 -4.007210 0.000000 0.000000 0.000000 6.108605 0.940097 2.701448 -74.593803 19.522924 -4.328449 -8.674590 0.001165 31.673500 -6.320746 1.746516 0.413022 11.237500 -2.078610 -9.506420 73.197998 10.552875 3.473820 25.370012 0.116349 33.112099 12.832194 7.515890 0.455804 -33.109238 0.672845 2.248022 -2.150151 -1.284785 1.135497 8.195504 0.781460 0.930233 6.604897 -0.429543 -3.435708 18.946196 0.458062 0.790267 -11.644512 2.760721 -2.794761
+-0.025751 40.586620 2.968130 5.315712 0.000000 -2.980694 -0.920928 -1.497272 1.052490 3.234412 -0.638850 7.299640 0.000000 0.000000 0.000000 0.407942 -0.012259 0.125621 4.790095 1.457380 -3.998490 0.000000 0.000000 0.000000 5.549260 -3.365490 1.062321 -70.361504 22.981373 -6.453584 -9.202444 -0.116349 29.477793 -4.281356 2.351367 0.271411 9.001228 2.655120 -4.562235 69.810707 14.498660 7.158091 26.056526 -0.001165 34.045898 13.209469 13.282380 0.089536 -34.634613 1.663542 5.230479 -2.874681 -1.354475 2.571830 22.279716 3.499624 -0.699431 20.209835 -0.809652 1.118457 16.397682 5.239849 0.531933 4.287104 -0.005791 -1.855253
+-0.042716 39.998322 2.968130 5.501198 -0.195238 -2.305610 -0.907500 -2.142024 1.066763 3.411768 -0.413939 6.538830 0.000000 0.000000 0.000000 0.042751 -0.359102 0.204164 4.601790 1.017530 -3.147050 0.000000 0.000000 0.000000 3.099600 -8.162370 -1.197800 -69.300285 21.187300 -7.691476 -10.382070 -0.116349 27.829779 -2.964121 2.533740 0.088928 5.930410 6.809920 -1.510628 68.946701 16.533205 9.626520 25.462721 -0.001165 34.768108 12.183719 15.557400 0.331903 -28.754253 0.755188 4.375766 -1.009826 -1.458228 1.758046 24.688309 2.019926 4.264540 32.704803 0.557644 1.612639 2.529472 2.394109 -2.208158 20.776360 -1.529196 3.034380
+-0.049000 40.603870 2.968130 6.780290 -0.351810 -1.598240 -2.588980 -1.606370 0.847577 4.232220 -0.109319 4.063770 0.000000 0.000000 0.000000 -0.004632 -0.082528 0.092734 3.695360 0.754448 -1.973470 0.000000 0.000000 0.000000 -3.382610 -9.230900 -4.384020 -70.634499 16.457001 -8.214620 -11.962300 -0.116349 26.305099 -4.355410 1.223352 0.074780 2.220852 8.700970 0.705023 70.886101 16.121653 10.703200 23.801001 -0.001165 35.403008 10.842098 13.529000 0.285265 -30.703316 1.151009 4.769948 21.616037 -1.309091 -0.028890 -1.231163 1.831893 6.845827 -0.739149 -0.525025 -1.818685 54.363552 4.687464 1.070386 9.172863 -5.207838 3.084680
+-0.037075 41.810562 2.968130 7.055270 -0.438710 0.384793 -4.569364 -0.717793 0.479063 5.657620 0.720518 -0.458285 0.000000 0.000000 0.000000 -0.107271 0.166920 -0.020543 3.943000 0.396601 -0.249927 0.000000 0.000000 0.000000 -10.086300 -6.565590 -9.243760 -73.083900 11.406500 -7.985020 -17.755999 -0.116349 26.980301 -8.686354 -1.359260 -0.250100 -1.313670 7.736764 2.069029 74.425400 9.326259 7.569613 21.112984 -0.001165 35.306301 9.635085 8.660240 0.267681 -20.897928 0.020024 4.532423 18.853041 -1.135874 -0.291826 -8.274943 0.771707 7.956114 -25.128605 -1.376650 -2.522182 73.947456 3.378500 1.186994 6.482924 -9.345399 2.210355
+-0.049278 42.520454 2.968130 6.822440 -0.438727 2.183500 -4.714581 0.033945 0.001831 6.978283 0.949968 -3.168510 0.000000 0.000000 0.000000 -0.088913 0.029736 -0.069249 4.540220 0.260280 2.275510 0.000000 0.000000 0.000000 -14.103100 0.031943 -11.539000 -76.636299 2.965070 -5.714349 -27.725838 -0.116349 29.013399 -11.883558 -5.810566 0.228837 -2.874230 2.376980 2.574062 76.070900 -4.814778 2.675105 15.644087 -0.001165 34.865601 8.494974 2.678356 0.247649 -5.750584 -0.068204 3.706347 1.838004 -0.992450 0.704012 -6.252903 -1.350606 6.723120 -36.764957 -1.611116 -2.217723 62.390575 2.803816 0.225822 8.343335 -4.624382 -0.687400
+-0.114791 42.307247 2.968130 5.942111 -0.351858 2.723740 -3.437904 0.393807 -0.396038 5.711505 0.990823 -5.642550 0.000000 0.000000 0.000000 -0.081509 -0.384691 -0.167481 4.107840 -0.611224 3.806190 0.000000 0.000000 0.000000 -13.708600 2.341550 -11.484700 -76.444801 -4.952410 -2.547715 -31.865551 -0.116349 31.645611 -12.762356 -9.514564 0.139668 -3.949440 -0.303047 2.674948 75.069115 -17.845882 -1.945802 10.712088 -0.001165 33.449230 7.987984 -0.941079 0.350273 -1.522238 0.247741 4.483660 14.987247 -0.352648 -0.560945 -12.466013 -2.716281 4.674154 -37.941704 -0.523537 -2.521068 37.077835 -0.004409 -0.244420 3.539016 -0.820705 -0.794870
+-0.113669 41.299294 2.968130 5.389027 -0.195307 3.103870 -1.363676 0.587081 -0.746072 3.540622 0.920307 -6.794440 0.000000 0.000000 0.000000 -0.065579 -0.149635 -0.332926 4.875833 -1.027240 4.007210 0.000000 0.000000 0.000000 -9.904170 0.530223 -9.506420 -73.197998 -10.068400 3.473820 -32.364998 -0.116349 32.629684 -13.555813 -12.098807 0.455804 -4.560220 -0.457685 1.669190 73.628990 -22.593725 -6.134900 8.915796 -0.001165 31.673500 7.526777 -1.987722 0.413022 8.712742 0.925539 3.315778 18.955389 -0.467139 -0.801753 -12.081754 -2.643082 2.386326 -31.304344 -0.205673 -2.097641 -2.062192 1.296254 -1.151119 7.956662 -0.989662 -1.269012
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/doc/license.txt
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/doc/license.txt (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/doc/license.txt 2007-11-01 17:27:12 UTC (rev 553)
@@ -0,0 +1,9 @@
+The Croquet License
+
+Copyright © 2002-2007 by The Croquet Consortium, Inc. and other individual, corporate, and institutional contributors who have collectively contributed elements of the CroquetTM software code to the Croquet Project. CroquetTM is a trademark of The Croquet Consortium, Inc..
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.smap
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.smap (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/geometry/body.smap 2007-11-01 17:27:12 UTC (rev 553)
@@ -0,0 +1,19 @@
+g hip 356 363 367 367 369 369 374 374 378 378 392 392 790 795
+g lShin 402 437
+g lHand 197 339
+g rThigh 796 828
+g neck 15 16 53 54 97 97 100 100 106 106 482 483 501 501 503 503 541 544 549 549 551 551
+g lFoot 438 464
+g rFoot 865 891
+g lCollar 17 18 57 58 98 99 107 107 129 140
+g lForeArm 162 196
+g head 19 52 55 56 59 96 101 105 108 128 465 467 484 500 502 502 504 540 545 548 550 550 552 572 892 894
+g rCollar 573 582
+g abdomen 348 355 784 789
+g chest 141 154 340 347 583 592 778 783
+g rForeArm 607 634
+g rShldr 468 481 593 606
+g lShldr 1 14 155 161
+g rHand 635 777
+g lThigh 364 366 368 368 370 373 375 377 379 391 393 401
+g rShin 829 864
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/sourceArt/guest.blend
===================================================================
(Binary files differ)
Property changes on: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/sourceArt/guest.blend
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/texture/body.jpg
===================================================================
(Binary files differ)
Property changes on: maven/trunk/ogoglio-bodies/ogoglio-body-guest/src/main/resources/texture/body.jpg
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: maven/trunk/ogoglio-bodies/pom.xml
===================================================================
--- maven/trunk/ogoglio-bodies/pom.xml 2007-11-01 17:27:05 UTC (rev 552)
+++ maven/trunk/ogoglio-bodies/pom.xml 2007-11-01 17:27:12 UTC (rev 553)
@@ -20,6 +20,7 @@
<module>ogoglio-body-sim</module>
<module>ogoglio-body-mike</module>
<module>ogoglio-body-andrea</module>
+ <module>ogoglio-body-guest</module>
</modules>
</project>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-01 17:27:04
|
Revision: 552
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=552&view=rev
Author: trevorolio
Date: 2007-11-01 10:27:05 -0700 (Thu, 01 Nov 2007)
Log Message:
-----------
Added a separate guest body, in this case a simplified Mike with a matte black texture.
Modified Paths:
--------------
maven/trunk/ogoglio-server/pom.xml
Modified: maven/trunk/ogoglio-server/pom.xml
===================================================================
--- maven/trunk/ogoglio-server/pom.xml 2007-11-01 17:27:02 UTC (rev 551)
+++ maven/trunk/ogoglio-server/pom.xml 2007-11-01 17:27:05 UTC (rev 552)
@@ -144,6 +144,12 @@
<artifactItem>
<groupId>com.ogoglio.body</groupId>
<artifactId>
+ ogoglio-body-guest
+ </artifactId>
+ </artifactItem>
+ <artifactItem>
+ <groupId>com.ogoglio.body</groupId>
+ <artifactId>
ogoglio-body-andrea
</artifactId>
</artifactItem>
@@ -348,6 +354,12 @@
</dependency>
<dependency>
<groupId>com.ogoglio.body</groupId>
+ <artifactId>ogoglio-body-guest</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.ogoglio.body</groupId>
<artifactId>ogoglio-body-andrea</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>runtime</scope>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-01 17:27:04
|
Revision: 551
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=551&view=rev
Author: trevorolio
Date: 2007-11-01 10:27:02 -0700 (Thu, 01 Nov 2007)
Log Message:
-----------
Added a separate guest body, in this case a simplified Mike with a matte black texture.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/WebConstants.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-01 13:16:40 UTC (rev 550)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-01 17:27:02 UTC (rev 551)
@@ -165,8 +165,7 @@
for (int i = 0; i < userDocs.length; i++) {
BodyConfigurationDocument bodyConfDoc = null;
if (userDocs[i].getUsername().startsWith(WebConstants.GUEST_COOKIE_PREFIX)) {
- System.out.println("Need to handle guest bodies correctly");
- bodyConfDoc = new BodyConfigurationDocument(0, userDocs[i].getUsername(), "Body", 1, null);
+ bodyConfDoc = new BodyConfigurationDocument(0, userDocs[i].getUsername(), "Body", -1, null);
} else {
bodyConfDoc = webClient.getBodyConfiguration(userDocs[i].getUsername(), userDocs[i].getBodyConfigurationID());
}
@@ -758,8 +757,12 @@
public ZipInputStream getBodyData(long bodyDataID) {
try {
- BodyDataDocument dataDoc = webClient.getBodyDataDocument(bodyDataID);
- return webClient.getBodyData(dataDoc.getFileName());
+ if(bodyDataID == -1){
+ return webClient.getBodyData(WebConstants.GUEST_BODY_FILE_NAME);
+ } else {
+ BodyDataDocument dataDoc = webClient.getBodyDataDocument(bodyDataID);
+ return webClient.getBodyData(dataDoc.getFileName());
+ }
} catch (IOException e) {
Log.warn("Requested an unknown body: " + bodyDataID);
return null;
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java 2007-11-01 13:16:40 UTC (rev 550)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java 2007-11-01 17:27:02 UTC (rev 551)
@@ -33,8 +33,7 @@
this.bodyConfigurationID = bodyConfigurationID;
ArgumentUtils.assertNotEmpty(displayName);
this.displayName = displayName;
- ArgumentUtils.assertNotNegative(bodyDataID);
- this.bodyDataID = bodyDataID;
+ this.bodyDataID = bodyDataID; //-1 indicates that this is a guest body
this.baseTextureName = baseTextureName;
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/WebConstants.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/WebConstants.java 2007-11-01 13:16:40 UTC (rev 550)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/WebConstants.java 2007-11-01 17:27:02 UTC (rev 551)
@@ -15,4 +15,6 @@
public static final String REQUESTED_GUEST_NAME_PARAMETER = "requestedGuestName";
public static final String GUEST_DISPLAY_NAME_PREFIX = "Guest";
+
+ public static final String GUEST_BODY_FILE_NAME = "ogoglio-body-guest.jar";
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-11-01 13:16:40 UTC (rev 550)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-11-01 17:27:02 UTC (rev 551)
@@ -37,6 +37,7 @@
import com.ogoglio.util.Log;
import com.ogoglio.util.StreamUtils;
import com.ogoglio.util.UIConstants;
+import com.ogoglio.util.WebConstants;
import com.ogoglio.viewer.j3d.body.MorphDeltaMap;
import com.ogoglio.viewer.j3d.body.MorphDeltaMapParseException;
import com.ogoglio.viewer.j3d.body.MorphDeltaMapParser;
@@ -71,8 +72,6 @@
DEFAULT_APPEARANCE.setMaterial(DEFAULT_MATERIAL);
}
- public static final String[] BODY_NAMES = { "mike", "andrea" };
-
private TemplateDataProvider templateDataProvider = null;
private BodyDataProvider bodyDataProvider = null;
@@ -90,6 +89,10 @@
}
public BufferedImage getBodyTexture(String username, long bodyConfigurationID) {
+ if(username == null || username.startsWith(WebConstants.GUEST_COOKIE_PREFIX)){
+ return null;
+ }
+
BufferedImage image = dataCache.getBodyTexture(bodyConfigurationID);
if (image != null) {
return image;
@@ -112,6 +115,11 @@
dataCache.removeBodyTexture(bodyConfigurationID);
}
+ /**
+ *
+ * @param bodyDataID if -1, indicates guest body. otherwise, bodyDataID
+ * @return
+ */
public J3DBodyData getBodyData(long bodyDataID) {
J3DBodyData data = dataCache.getBodyData(bodyDataID);
if (data != null) {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java 2007-11-01 13:16:40 UTC (rev 550)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java 2007-11-01 17:27:02 UTC (rev 551)
@@ -41,8 +41,7 @@
data.setAttribute(OWNER_USERNAME, ownerUsername);
ArgumentUtils.assertNotNull(displayName);
data.setAttribute(DISPLAY_NAME, displayName);
- ArgumentUtils.assertNotNegative(bodyDataID);
- data.setAttribute(BODY_DATA_ID, bodyDataID);
+ data.setAttribute(BODY_DATA_ID, bodyDataID); //if -1, indicates to use the guest body
if(baseTextureName != null){
data.setAttribute(BASE_TEXTURE_NAME, baseTextureName);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-11-01 13:16:36
|
Revision: 550
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=550&view=rev
Author: trevorolio
Date: 2007-11-01 06:16:40 -0700 (Thu, 01 Nov 2007)
Log Message:
-----------
Updated the template editor UI to provide for script FILE upload in addition to inline editing.
This is handy for those of us who edit scripts in populate template directories using reasonable IDEs.
Added space.getOwnerUsername() to the script api so scripts can give owners more actions.
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptQuaternion.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/templateEditor.html
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptQuaternion.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptQuaternion.java 2007-10-31 13:50:49 UTC (rev 549)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptQuaternion.java 2007-11-01 13:16:40 UTC (rev 550)
@@ -15,6 +15,7 @@
package com.ogoglio.sim.script;
import javax.media.j3d.Transform3D;
+import javax.vecmath.Point3d;
import javax.vecmath.Quat4d;
import javax.vecmath.Vector3d;
@@ -97,6 +98,9 @@
}
public void jsFunction_rotate(double x, double y, double z) {
+ if(Double.isNaN(x) || Double.isNaN(y) || Double.isNaN(z)){
+ throw new IllegalArgumentException("Can't rotate with NaN: " + x + ", " + y + ", " + z);
+ }
Transform3D rotTransform = new Transform3D();
rotTransform.setEuler(new Vector3d(x, y, z));
@@ -110,6 +114,16 @@
setQuat(quat);
}
+ public void jsFunction_rotatePoint(ScriptPoint pointOfRotation, ScriptPoint pointToRotate){
+ Vector3d vectorOfRot = new Vector3d(); //new Vector3d(pointOfRotation.jsGet_x(), pointOfRotation.jsGet_y(), pointOfRotation.jsGet_z());
+ Transform3D rotTransform = new Transform3D(new Quat4d(x, y, z, w), vectorOfRot, 1);
+ Point3d workingPoint = new Point3d(pointToRotate.jsGet_x(), pointToRotate.jsGet_y(), pointToRotate.jsGet_z());
+ rotTransform.transform(workingPoint);
+ pointToRotate.jsSet_x(workingPoint.x);
+ pointToRotate.jsSet_y(workingPoint.y);
+ pointToRotate.jsSet_z(workingPoint.z);
+ }
+
public void jsFunction_set(double w, double x, double y, double z) {
this.w = w;
this.x = w;
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java 2007-10-31 13:50:49 UTC (rev 549)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java 2007-11-01 13:16:40 UTC (rev 550)
@@ -84,6 +84,10 @@
return spaceSimulator.getSpaceID();
}
+ public String jsGet_ownerUsername(){
+ return spaceSimulator.getSpace().getOwnerUsername();
+ }
+
public long jsGet_time() {
return System.currentTimeMillis();
}
@@ -171,6 +175,14 @@
return result;
}
+ public double jsFunction_getThingTemplateID(double thingID){
+ Thing thing = spaceSimulator.getSpace().getThing((long) thingID);
+ if (thing == null) {
+ return -1;
+ }
+ return thing.getTemplate().getTemplateID();
+ }
+
public ScriptPoint jsFunction_getThingPosition(double thingID) {
Thing thing = spaceSimulator.getSpace().getThing((long) thingID);
if (thing == null) {
Modified: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/templateEditor.html
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/templateEditor.html 2007-10-31 13:50:49 UTC (rev 549)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/templateEditor.html 2007-11-01 13:16:40 UTC (rev 550)
@@ -61,7 +61,7 @@
var objMessage = null;
var seatCheckbox = null;
var seatPositionForm = null;
-
+var scriptFileForm = null;
var scriptEditor = null;
var templateDoc = null;
@@ -89,10 +89,12 @@
titleElement.innerHTML = "Template: " + escapeHTML(templateDoc.getAttribute('displayname')) + " <input id='titleFormGoButton' type='submit' value='rename' onclick='titleFormGo(); return false;' />";
+
var templatePath = appPath + "/account/" + authedUsername + "/template/" + templateID;
obj0Form.action = templatePath + "/geometry/data/0";
obj0Form.onsubmit = submitObj0;
-
+ scriptFileForm.action = templatePath + "/script/";
+
var geometryMessage = "does not exist";
var resourceHTML = "";
@@ -157,6 +159,10 @@
return AIM.submit(resourceForm, {'onStart' : startedTemplateForm, 'onComplete' : completedTemplateForm});
}
+function scriptFileFormGo(){
+ return AIM.submit(scriptFileForm, {'onStart' : startedScriptFileForm, 'onComplete' : completedScriptFileForm});
+}
+
function titleFormGo(){
var goButton = document.getElementById("titleFormGoButton");
if(goButton.value == "rename"){
@@ -174,6 +180,17 @@
}
}
+function scriptFileFormGo(){
+ return AIM.submit(scriptFileForm, {'onStart' : startedScriptFileForm, 'onComplete' : completedScriptFileForm});
+}
+
+function startedScriptFileForm(){
+}
+
+function completedScriptFileForm(response){
+ requestTemplateScript(authedUsername, templateID, handleScript);
+}
+
function scriptFormGo(scriptForm){
var newScript = trim(scriptForm.scriptTextArea.value);
updateTemplateScript(authedUsername, templateID, newScript, handleScriptUpdate);
@@ -248,7 +265,8 @@
objMessage = document.getElementById("objMessage");
seatCheckbox = document.getElementById("seatCheckbox");
seatPositionForm = document.getElementById("seatPositionForm");
-
+ scriptFileForm = document.getElementById("scriptFileForm");
+
scriptEditor = document.getElementById('scriptEditor');
if(templateID == null){
@@ -324,8 +342,18 @@
<br clear="all"/>
<div class="section">
+ <h3>Upload script:</h3>
+ <form id="scriptFileForm" onsubmit="scriptFileFormGo();" target="scriptFileTarget" action="" enctype="multipart/form-data" method="post">
+ <input type="file" name="scriptFile" />
+ <input type="submit" value="upload script" />
+ </form>
+ <iframe id="scriptFileTarget" name="scriptFileTarget" style="width: 1px; height: 1px;"></iframe>
+ </div>
+ <br clear="all"/>
+
+ <div class="section">
<div style="float: right;" class="navLink"><a href="http://ogoglio.wiki.sourceforge.net/ServerManualJavascriptAPI">Script API »</a></div>
- <h3>Script:</h3>
+ <h3>Edit script:</h3>
<div id="scriptEditor">
</div>
</div>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-10-31 13:50:50
|
Revision: 549
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=549&view=rev
Author: trevorolio
Date: 2007-10-31 06:50:49 -0700 (Wed, 31 Oct 2007)
Log Message:
-----------
Tracked down a bug in which populate silently failed when source space docs have the same timestamp.
It's no longer silent during failure, but keying files by timestamp is a weak idea since a single cp can (in fact did) break the world.
Modified Paths:
--------------
maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/PopulateMojo.java
Modified: maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/PopulateMojo.java
===================================================================
--- maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/PopulateMojo.java 2007-10-30 03:00:11 UTC (rev 548)
+++ maven/trunk/dev-plugins/src/main/java/com/ogoglio/plugin/PopulateMojo.java 2007-10-31 13:50:49 UTC (rev 549)
@@ -182,6 +182,9 @@
FileInputStream inputStream = new FileInputStream(candidate);
String docContent = StreamUtils.readInput(inputStream);
SpaceDocument doc = new SpaceDocument(XMLElement.parseElementFromString(docContent));
+ if(localSpaces.get(candidate.lastModified()) != null){
+ throw new MojoExecutionException("Sadly, space-* docs must have unique timestamps.");
+ }
localSpaces.put(candidate.lastModified(), doc);
inputStream.close();
} catch (IOException e) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-10-30 03:00:07
|
Revision: 548
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=548&view=rev
Author: trevorolio
Date: 2007-10-29 20:00:11 -0700 (Mon, 29 Oct 2007)
Log Message:
-----------
Using the body editor you can now create, modify, and delete body configurations.
Still needs much UI style love, but that can wait.
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java 2007-10-30 00:18:31 UTC (rev 547)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyPersistTasks.java 2007-10-30 03:00:11 UTC (rev 548)
@@ -81,6 +81,30 @@
return (BodyConfigurationRecord) task.execute();
}
+ public static boolean deleteBodyConfiguration(final BodyConfigurationRecord record, SessionFactory sessionFactory) throws PersistException {
+ HibernateTask task = new HibernateTask() {
+ public Object run(Session session) throws PersistException {
+ Query accountQuery = session.getNamedQuery(AccountPersistTasks.ACCOUNT_BY_USERNAME);
+ accountQuery.setString("username", record.getOwnerUsername());
+ AccountRecord accountRec = (AccountRecord)accountQuery.uniqueResult();
+ if(accountRec == null || accountRec.getDefaultBodyConfigurationID() == record.getBodyConfigurationID()){
+ return Boolean.FALSE;
+ }
+
+ Query settingsQuery = session.getNamedQuery(BODY_SETTINGS_BY_CONFIGURATION_ID);
+ settingsQuery.setLong("bodyConfigurationID", record.getBodyConfigurationID());
+ BodySettingRecord[] settings = (BodySettingRecord[])settingsQuery.list().toArray(new BodySettingRecord[0]);
+ for (int i = 0; i < settings.length; i++) {
+ session.delete(settings[i]);
+ }
+ session.delete(record);
+ return Boolean.TRUE;
+ }
+ };
+ task.setSessionFactory(sessionFactory);
+ return Boolean.TRUE.equals(task.execute());
+ }
+
public static BodyConfigurationRecord[] findBodyConfigurationsByUsername(final String username, SessionFactory sessionFactory) throws PersistException {
HibernateTask task = new HibernateTask() {
public Object run(Session session) throws PersistException {
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-10-30 00:18:31 UTC (rev 547)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-10-30 03:00:11 UTC (rev 548)
@@ -309,6 +309,27 @@
}
sendStringResponse(bodyConfigDoc.toString(), "text/xml", response);
}
+
+ public void doDelete(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws ServletException, IOException, PersistException {
+ String username = pathElements[pathElements.length - 3];
+ if (!requestOkForBody(request, username, authedAccount)) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return;
+ }
+ long bodyConfigID = Long.parseLong(pathElements[pathElements.length - 1]);
+
+ BodyConfigurationRecord record = BodyPersistTasks.findBodyConfigurationByID(bodyConfigID, getSessionFactory());
+ if (record == null || !username.equals(record.getOwnerUsername())) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+
+ getMediaService().delete(MediaService.getBodyTextureName(record.getBodyConfigurationID()));
+ BodyPersistTasks.deleteBodyConfiguration(record, getSessionFactory());
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+
+
}
private class DefaultBodyResource extends AuthenticatedSiteResource {
Modified: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js 2007-10-30 00:18:31 UTC (rev 547)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js 2007-10-30 03:00:11 UTC (rev 548)
@@ -161,7 +161,6 @@
var selectedValue = +(form.bodyDataSelect.options[form.bodyDataSelect.selectedIndex].value);
var currentBodyDataID = +bodyXML.getAttribute("bodydataid");
if(selectedValue == currentBodyDataID){
- alert("no change");
return;
}
editor.setBodyData(selectedValue);
@@ -169,13 +168,34 @@
return true;
}
+function pickNewBodyName(){
+ for(var i=1; i < 100; i++){
+ var foundIt = false;
+ var potentialName = "Body " + i;
+ for(var j=0; j < bodyListXML.childNodes.length; j++){
+ if(potentialName == bodyListXML.childNodes[j].getAttribute("displayname")){
+ foundIt = true;
+ break;
+ }
+ }
+ if(!foundIt){
+ return potentialName;
+ }
+ }
+ return null;
+}
+
function bodySwitcherGo(){
var editor = document.getElementById("viewer");
var form = document.getElementById("bodySwitcherForm");
var selectedValue = form.bodySwitcher.options[form.bodySwitcher.selectedIndex].value;
if(selectedValue == "newBody"){
- alert("Show new body dialog");
- return false;
+ var newBodyName = pickNewBodyName();
+ if(newBodyName == null){
+ return false;
+ }
+ createBody(authedUsername, newBodyName, bodyXML.getAttribute("bodydataid"), handleNewBody);
+ return true;
} else if(selectedValue == "deleteBody"){
var answer = confirm("Really Delete This Body?");
if(!answer){
@@ -201,6 +221,17 @@
return true;
}
+function handleNewBody(xml){
+ if(xml == null){
+ alert("Error creating body.");
+ return;
+ }
+ var editor = document.getElementById("viewer");
+ var newBodyConfigurationID = +(xml.getAttribute("bodyconfigurationid"));
+ editor.setDefaultBodyConfiguration(newBodyConfigurationID);
+ requestBodyDocument(authedUsername, newBodyConfigurationID, handleBody);
+}
+
function handleBodyDeletion(text){
requestDefaultBodyDocument(authedUsername, handleBody);
}
Modified: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js 2007-10-30 00:18:31 UTC (rev 547)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js 2007-10-30 03:00:11 UTC (rev 548)
@@ -782,10 +782,11 @@
new XMLRequestManager(appPath + "/account/" + username + "/body/" + bodyID, httpListener).send();
}
-function createBody(username, bodyName, listener){
- var bodyXML = document.createElement("body");
+function createBody(username, bodyName, bodyDataID, listener){
+ var bodyXML = document.createElement("bodyconfiguration");
bodyXML.setAttribute("ownerusername", username);
bodyXML.setAttribute("displayname", bodyName);
+ bodyXML.setAttribute("bodydataid", bodyDataID);
var manager = new XMLRequestManager(appPath + "/account/" + username + "/body/", new BasicHTTPListener(listener));
manager.setMethod("POST");
manager.send(serializeXML(bodyXML));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-10-30 00:18:27
|
Revision: 547
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=547&view=rev
Author: trevorolio
Date: 2007-10-29 17:18:31 -0700 (Mon, 29 Oct 2007)
Log Message:
-----------
Updated the body editor so that you can choose a new body configuration and choose which body data to use as the base.
Still need to add the ability to add a body configuration.
Modified Paths:
--------------
maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java
Modified: maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java
===================================================================
--- maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java 2007-10-30 00:18:29 UTC (rev 546)
+++ maven/trunk/ogoglio-body-editor-applet/src/main/java/com/ogoglio/bodyeditor/BodyEditorApplet.java 2007-10-30 00:18:31 UTC (rev 547)
@@ -193,6 +193,16 @@
saveBodyConfiguration();
updateTextures();
}
+
+ public void setBodyData(long bodyDataID){
+ if (user == null || bodyPanel == null || bodyPanel.renderable == null) {
+ return;
+ }
+ user.getBodyConfiguration().setBodyDataID(bodyDataID);
+ bodyPanel.bodyData = dataManager.getBodyData(bodyDataID);
+ bodyPanel.renderable.initBody(bodyPanel.bodyData, dataManager.getBodyTexture(user.getUsername(), user.getBodyConfiguration().getBodyConfigurationID()));
+ saveBodyConfiguration();
+ }
public void saveBodyConfiguration() {
if (user == null || bodyPanel == null || bodyPanel.renderable == null) {
@@ -204,7 +214,32 @@
e.printStackTrace();
}
}
-
+
+ public void setDefaultBodyConfiguration(long bodyConfigurationID){
+ if (user == null || bodyPanel == null || bodyPanel.renderable == null) {
+ return;
+ }
+ if(user.getBodyConfiguration().getBodyDataID() == bodyConfigurationID){
+ return;
+ }
+ try {
+ BodyConfigurationDocument doc = webClient.getBodyConfiguration(user.getUsername(), bodyConfigurationID);
+ if(doc == null){
+ System.err.println("Could not fetch body config");
+ return;
+ }
+ user.setBodyConfiguration(new BodyConfiguration(doc));
+ bodyPanel.bodyData = dataManager.getBodyData(user.getBodyConfiguration().getBodyDataID());
+ bodyPanel.renderable.initBody(bodyPanel.bodyData, dataManager.getBodyTexture(user.getUsername(), user.getBodyConfiguration().getBodyConfigurationID()));
+ accountDoc.setBodyConfigurationID(bodyConfigurationID);
+ webClient.updateAccount(accountDoc);
+
+ } catch(IOException e){
+ System.err.println("Could not fetch body config: " + e);
+ return;
+ }
+ }
+
private class SpacelessUser extends User {
public SpacelessUser(String username, BodyConfigurationDocument bodyConfigDoc) {
super(new Space(new SpacelessContext(), 1, "Space", "nobody", false, 0), username, new Transform3D(), new BodyConfiguration(bodyConfigDoc), null);
@@ -258,8 +293,8 @@
add(canvas, BorderLayout.CENTER);
setupUniverse();
}
-
- public boolean addUserRenderable() {
+
+ public boolean initUserRenderable() {
try {
bodyData = dataManager.getBodyData(user.getBodyConfiguration().getBodyDataID());
renderable = new J3DUserRenderable(user, bodyData, dataManager.getBodyTexture(user.getUsername(), user.getBodyConfiguration().getBodyConfigurationID()));
@@ -271,6 +306,12 @@
}
}
+ public void fetchNewBodyConfiguration() throws IOException{
+ user.setBodyConfiguration(new BodyConfiguration(webClient.getDefaultBodyConfiguration(accountDoc.getUsername())));
+ bodyData = dataManager.getBodyData(user.getBodyConfiguration().getBodyDataID());
+ renderable.initBody(bodyData, dataManager.getBodyTexture(user.getUsername(), user.getBodyConfiguration().getBodyConfigurationID()));
+ }
+
private void addDirectionalLight(Color3f color, Vector3f direction) {
DirectionalLight lightD1 = new DirectionalLight(color, direction);
lightD1.setInfluencingBounds(bounds);
@@ -357,7 +398,7 @@
validate();
new Thread() {
public void run() {
- bodyPanel.addUserRenderable();
+ bodyPanel.initUserRenderable();
completedInitialLoad = true;
}
}.start();
@@ -393,6 +434,7 @@
} catch (IOException e) {
removeAll();
validate();
+ e.printStackTrace();
add(new ErrorPanel("Unfortunately, I could not load a body."));
validate();
return null;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-10-30 00:18:26
|
Revision: 546
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=546&view=rev
Author: trevorolio
Date: 2007-10-29 17:18:29 -0700 (Mon, 29 Oct 2007)
Log Message:
-----------
Updated the body editor so that you can choose a new body configuration and choose which body data to use as the base.
Still need to add the ability to add a body configuration.
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.html
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js
Added Paths:
-----------
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.css
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java 2007-10-30 00:18:24 UTC (rev 545)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java 2007-10-30 00:18:29 UTC (rev 546)
@@ -71,6 +71,21 @@
}
}
}
+
+ if(document.getBodyConfigurationID() != -1 && document.getBodyConfigurationID() != record.getDefaultBodyConfigurationID()){
+ Query bodyConfigQuery = hibernateSession.getNamedQuery(BodyPersistTasks.BODY_CONFIGURATION_BY_ID);
+ bodyConfigQuery.setLong("bodyConfigurationID", document.getBodyConfigurationID());
+ BodyConfigurationRecord bodyConfigRecord = (BodyConfigurationRecord)bodyConfigQuery.uniqueResult();
+ if(bodyConfigRecord == null){
+ return Boolean.FALSE;
+ }
+ if(!record.getUsername().equals(bodyConfigRecord.getOwnerUsername())){
+ return Boolean.FALSE;
+ }
+ dirty = true;
+ record.setDefaultBodyConfigurationID(document.getBodyConfigurationID());
+ }
+
if (dirty) {
hibernateSession.update(record);
return Boolean.TRUE;
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-10-30 00:18:24 UTC (rev 545)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-10-30 00:18:29 UTC (rev 546)
@@ -84,9 +84,9 @@
AccountDocument result = null;
if (authed) {
- result = new AccountDocument(account.getUsername(), account.getAccountlevel(), account.getFirstName(), account.getLastName(), account.getHomepage(), null, account.getEmail(), account.getCreationDate(), null, account.getFrozenUntil());
+ result = new AccountDocument(account.getUsername(), account.getAccountlevel(), account.getFirstName(), account.getLastName(), account.getHomepage(), null, account.getEmail(), account.getCreationDate(), null, account.getFrozenUntil(), account.getDefaultBodyConfigurationID());
} else {
- result = new AccountDocument(account.getUsername(), null, null, null, null, null, null, account.getCreationDate(), null, account.getFrozenUntil());
+ result = new AccountDocument(account.getUsername(), null, null, null, null, null, null, account.getCreationDate(), null, account.getFrozenUntil(), -1);
}
return result;
}
Added: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.css
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.css (rev 0)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.css 2007-10-30 00:18:29 UTC (rev 546)
@@ -0,0 +1,62 @@
+#appletDiv {
+ width: 300px;
+ height: 400px;
+ position: absolute;
+ top: 20px;
+ left: 205px;
+}
+
+#leftControlDiv {
+ position: absolute;
+ top: 25px;
+ left: 0px;
+ width: 200px;
+ height: 400px;
+ overflow: auto;
+ visibility: hidden;
+}
+
+#rightControlDiv {
+ position: absolute;
+ top: 25px;
+ left: 510px;
+ width: 200px;
+ height: 400px;
+ visibility: hidden;
+}
+
+#topControlDiv {
+ position: absolute;
+ top: 0px;
+ left: 25px;
+ height: 20px;
+ width: 100%;
+ text-align: center;
+ visibility: hidden;
+}
+
+#topControlDiv form {
+ display: inline;
+}
+
+#bottomControlDiv {
+ position: absolute;
+ top: 435px;
+ left: 0px;
+ height: 30px;
+ width: 100%;
+ visibility: hidden;
+}
+
+#morphControls form {
+ display: inline;
+}
+
+#animationControls form input {
+ margin-bottom: 5px;
+ width: 75px;
+}
+
+#textureForm {
+ margin-top: 25px;
+}
Modified: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.html
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.html 2007-10-30 00:18:24 UTC (rev 545)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.html 2007-10-30 00:18:29 UTC (rev 546)
@@ -4,8 +4,11 @@
<link rel="stylesheet" href="style.css" type="text/css" />
<script type="text/javascript" src="/og/ogoglio.js"></script>
<script type="text/javascript" src="site.js"></script>
-<script type="text/javascript" src="webtoolkit.aim.js"></script>
+<script type="text/javascript" src="/og/webtoolkit.aim.js"></script>
+<script type="text/javascript" src="/og/body.js"></script>
+<link rel="stylesheet" href="/og/body.css" type="text/css" />
+
<title>Ogoglio Example: body</title>
<style type="text/css">
#main {
@@ -13,7 +16,7 @@
position: relative;
top: 0px;
left: 0px;
- height: 430px;
+ height: 465px;
overflow: hidden;
width: 730px;
}
@@ -29,244 +32,19 @@
margin: 10px 0px 10px 0px;
}
-#appletDiv {
- width: 300px;
- height: 400px;
- position: absolute;
- top: 0px;
- left: 205px;
-}
-#leftControlDiv {
- position: absolute;
- top: 0px;
- left: 0px;
- width: 200px;
- height: 400px;
- overflow: auto;
-}
-
-#rightControlDiv {
- position: absolute;
- top: 0px;
- left: 510px;
- width: 200px;
- height: 400px;
-}
-
-#morphControls form {
- display: inline;
-}
-
-#animationControls form input {
- margin-bottom: 5px;
- width: 75px;
-}
-
-#textureForm {
- margin-top: 25px;
-}
-
</style>
<script type="text/javascript">
-var loginCookie = getLoginCookie();
-
var titleElement = null;
var mainElement = null;
-var titleElement = null;
-var appletDiv = null;
-var leftControlDiv = null;
-var rightControlDiv = null;
-var bottomControlDiv = null;
-var textureSelectionDiv = null;
-var textureForm = null;
-var morphControls = null;
-var animationControls = null;
-var bodyXML = null;
-
-function handleAuth(){
- if(loginCookie == null){
- mainElement.innerHTML = "<h2>Please sign in to use this page.</h2>";
- return;
- }
-
- if(authedUsername == null){
- mainElement.innerHTML = "<h2>Please log in.</h2>";
- return;
- }
- writeApplet();
- requestDefaultBodyDocument(authedUsername, handleBodyConfiguration);
-}
-
-function handleBodyConfiguration(xml){
- if(xml == null){
- bottomControlDiv.innerHTML = "";
- return;
- }
- bodyXML = xml;
- var bodyConfigurationID = +bodyXML.getAttribute("bodyconfigurationid");
- var ownerUsername = bodyXML.getAttribute("ownerusername");
-
- textureForm.action = appPath + "/account/" + ownerUsername + "/body/" + bodyConfigurationID + "/texture";
-
- setTimeout("awaitInitialLoad();", 1000);
-}
-
-function awaitInitialLoad(){
- var editor = document.getElementById("viewer");
- if(editor != null && editor.completedInitialLoad()){
- initControls();
- return;
- }
- setTimeout("awaitInitialLoad();", 500);
-}
-
-function initControls(){
- var editor = document.getElementById("viewer");
- var morphNames = editor.getMorphNames();
- var morphHTML = "";
- for(var i = morphNames.length - 1; i >= 0; i--){
- var settingValue = editor.getMorphSetting(morphNames[i]);
- morphHTML += "<h4>" + morphNames[i] + ":</h4>";
- morphHTML += "<form onsubmit='changeMorph(\"" + morphNames[i] + "\", 0.1);return false;'><input type='submit' value='+' name='" + morphNames[i] + "'></form>";
- morphHTML += " <span id='" + morphNames[i] + " setting'>" + formatSettingValue(settingValue) + "</span> ";
- morphHTML += "<form onsubmit='changeMorph(\"" + morphNames[i] + "\", -0.1);return false;'><input type='submit' value='-' name='" + morphNames[i] + "'></form>";
- }
- morphControls.innerHTML = morphHTML;
-
- var animationNames = editor.getAnimationNames();
- var animationHTML = "";
- for(var i = 0; i < animationNames.length; i++){
- if(animationNames[i] == "default"){
- continue;
- }
- animationHTML += "<form onsubmit='playAnimation(\"" + animationNames[i] + "\"); return false;'><input type='submit' value='" + animationNames[i] + "'/></form>";
- }
- animationControls.innerHTML = animationHTML;
-
- var textureNames = editor.getBaseTextureNames();
- var baseTextureName = bodyXML.getAttribute("basetexturename");
-
- var textureHTML = "<form id='textureSelectForm' action='body.html' method='get' onsubmit='return false;'>";
- textureHTML += "<select id='textureSelect' onchange='textureSelectGo();' name='textureSelect'>";
- if(baseTextureName == null){
- textureHTML += "<option selected='selected' value='Default'>Default</option>";
- } else {
- textureHTML += "<option value='Default'>Default</option>";
- }
- for(var i=0; i < textureNames.length; i++){
- var selectedText = textureNames[i] == baseTextureName ? "selected='selected'" : "";
- textureHTML += "<option " + selectedText + " value='" + textureNames[i] + "'>" + textureNames[i] + "</option>";
- }
- textureHTML += "</select></form>";
- textureSelectionDiv.innerHTML = textureHTML;
-}
-
-function textureSelectGo(){
- var textureSelectForm = document.getElementById("textureSelectForm");
- var selectedTextureName = textureSelectForm.textureSelect.options[textureSelectForm.textureSelect.selectedIndex].value;
- var currentTextureName = bodyXML.getAttribute("basetexturename");
- if(currentTextureName == selectedTextureName || (currentTextureName == null && selectedTextureName == "Default")){
- return;
- }
- var editor = document.getElementById("viewer");
- if(selectedTextureName == "Default"){
- editor.setBaseTexture(null);
- } else {
- editor.setBaseTexture(selectedTextureName);
- }
- requestDefaultBodyDocument(authedUsername, handleBodyConfiguration);
- return true;
-}
-
-function startedTextureForm() {
- return true;
-}
-
-function completedTextureForm(response) {
- repaintTexture();
-}
-
-function handleTextureForm(){
- AIM.submit(textureForm, {'onStart' : startedTextureForm, 'onComplete' : completedTextureForm})
- return true;
-}
-
-function textureDeleteGo(){
- if(bodyXML == null){
- return;
- }
- deleteBodyTexture(authedUsername, bodyXML.getAttribute("bodyconfigurationid"), handleTextureDelete);
-}
-
-function handleTextureDelete(){
- repaintTexture();
-}
-
-function repaintTexture(){
- var ogViewer = document.getElementById("viewer");
- ogViewer.updateTextures();
-}
-
-function playAnimation(animationName){
- var editor = document.getElementById("viewer");
- editor.playAnimation(animationName);
-}
-
-function changeMorph(morphName, delta){
- var editor = document.getElementById("viewer");
- var settingValue = editor.getMorphSetting(morphName) + delta;
- if(settingValue < 0) settingValue = 0;
- if(settingValue > 1) settingValue = 1;
- editor.setMorphSetting(morphName, settingValue);
- var settingSpan = document.getElementById(morphName + " setting");
- settingSpan.innerHTML = formatSettingValue(settingValue);
-}
-
-function formatSettingValue(settingValue){
- return settingValue.toPrecision(2);
-}
-
-function writeApplet(){
- if(loginCookie == null){
- appletDiv.innerHTML = "No cookie. Please sign in or register as a guest.";
- return;
- }
- var serviceURI = getServiceURI();
- var html = "<applet id='viewer' codebase='" + serviceURI + "' code='com.ogoglio.bodyeditor.BodyEditorApplet' archive='ogoglio-common.jar,ogoglio-body-editor-applet.jar' width='300' height='400' mayscript='true'>";
- html += "<param name='loginCookie' value='" + loginCookie + "' />";
- html += "<param name='serviceURI' value='" + getServiceURI() + "' />";
- html += "<param name='image' value='" + appPath + "/icons/32x32/face-monkey.png' />";
- html += "</applet>";
-
- appletDiv.innerHTML = html;
-}
-
-function doSave(){
- var editor = document.getElementById("viewer");
- if(editor == null){
- return;
- }
- editor.saveBodyConfiguration();
-}
-
function init(){
- populateMemberMenuItem();
-
titleElement = document.getElementById("title");
mainElement = document.getElementById("main");
- appletDiv = document.getElementById("appletDiv");
- leftControlDiv = document.getElementById("leftControlDiv");
- rightControlDiv = document.getElementById("rightControlDiv");
- bottomControlDiv = document.getElementById("bottomControlDiv");
- textureSelectionDiv = document.getElementById("textureSelectionDiv");
- textureForm = document.getElementById("textureForm");
- morphControls = document.getElementById("morphControls");
- animationControls = document.getElementById("animationControls");
- addAuthListeners(handleAuth, handleAuth);
+ populateMemberMenuItem();
+ initBodyEditor();
}
</script>
</head>
@@ -283,6 +61,10 @@
<h2 id="title">Body Editor:</h2>
<div id="main">
+ <div id="topControlDiv">
+ <span id="bodyListControl"> </span>
+ <span id="bodyDataControl"> </span>
+ </div>
<div id="leftControlDiv">
<div id="morphControls"> </div>
</div>
@@ -296,16 +78,17 @@
<input type="submit" value="upload custom skin" />
</form>
<form id="textureDeleteForm" onsubmit="textureDeleteGo(); return false;"><input type="submit" value="delete custom skin"/></form>
- <iframe id="textureTargetFrame" name="textureTargetFrame" style="width: 1px; height: 1px;"></iframe>
-
+ <iframe id="textureTargetFrame" name="textureTargetFrame" style="width: 1px; height: 1px;"></iframe>
</div>
+
<div id="appletDiv"> </div>
+
+ <div id="bottomControlDiv" style="text-align: center;">
+ <form onsubmit="doSave(); return false"><input type="submit" value="save" /></form>
+ </div>
</div> <!-- end main -->
-<div id="bottomControlDiv" style="text-align: center;">
- <form onsubmit="doSave(); return false"><input type="submit" value="save" /></form>
-</div>
<div id="footer">
Added: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js (rev 0)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.js 2007-10-30 00:18:29 UTC (rev 546)
@@ -0,0 +1,310 @@
+var loginCookie = getLoginCookie();
+
+var appletDiv = null;
+var leftControlDiv = null;
+var rightControlDiv = null;
+var bottomControlDiv = null;
+var topControlDiv = null;
+var textureSelectionDiv = null;
+var textureForm = null;
+var morphControls = null;
+var animationControls = null;
+var bodyListControl = null;
+var bodyDataControl = null;
+
+var bodyXML = null;
+var bodyListXML = null;
+var bodyDataListXML = null
+
+function handleBodyAuth(){
+ if(loginCookie == null){
+ appletDiv.innerHTML = "<h2>Please log in to use this page.</h2>";
+ return;
+ }
+
+ if(authedUsername == null){
+ appletDiv.innerHTML = "<h2>Please log in.</h2>";
+ return;
+ }
+ writeApplet();
+ requestDefaultBodyDocument(authedUsername, handleBody);
+}
+
+function stopAndDisplayError(errorMessage){
+ topControlDiv.innerHTML = "";
+ leftControlDiv.innerHTML = "";
+ rightControlDiv.innerHTML = "";
+ bottomControlDiv.innerHTML = "";
+ centerControlDiv.innerHTML = errorMessage;
+}
+
+function handleBody(xml){
+ if(xml == null){
+ stopAndDisplayError("<h1>Could not load the body editor.</h1>");
+ return;
+ }
+ bodyXML = xml;
+ requestBodyList(authedUsername, handleBodyList);
+}
+
+function handleBodyList(xml){
+ if(xml == null){
+ stopAndDisplayError("Could not load body list");
+ return;
+ }
+ bodyListXML = xml;
+
+ requestBodyDataList(handleBodyDataList);
+}
+
+function handleBodyDataList(xml){
+ if(xml == null){
+ stopAndDisplayError("Could not load body data list");
+ return;
+ }
+ bodyDataListXML = xml;
+
+ setTimeout("awaitInitialLoad();", 1000);
+}
+
+function awaitInitialLoad(){
+ var editor = document.getElementById("viewer");
+ if(editor != null && editor.completedInitialLoad()){
+ initControls();
+ return;
+ }
+ setTimeout("awaitInitialLoad();", 500);
+}
+
+function initControls(){
+ var editor = document.getElementById("viewer");
+ var morphNames = editor.getMorphNames();
+ var textureNames = editor.getBaseTextureNames();
+ var baseTextureName = bodyXML.getAttribute("basetexturename");
+ var defaultBodyID = +bodyXML.getAttribute("bodyconfigurationid");
+ var ownerUsername = bodyXML.getAttribute("ownerusername");
+
+ var morphHTML = "";
+ for(var i = morphNames.length - 1; i >= 0; i--){
+ var settingValue = editor.getMorphSetting(morphNames[i]);
+ morphHTML += "<h4>" + morphNames[i] + ":</h4>";
+ morphHTML += "<form onsubmit='changeMorph(\"" + morphNames[i] + "\", 0.1);return false;'><input type='submit' value='+' name='" + morphNames[i] + "'></form>";
+ morphHTML += " <span id='" + morphNames[i] + " setting'>" + formatSettingValue(settingValue) + "</span> ";
+ morphHTML += "<form onsubmit='changeMorph(\"" + morphNames[i] + "\", -0.1);return false;'><input type='submit' value='-' name='" + morphNames[i] + "'></form>";
+ }
+ morphControls.innerHTML = morphHTML;
+
+ var animationNames = editor.getAnimationNames();
+ var animationHTML = "";
+ for(var i = 0; i < animationNames.length; i++){
+ if(animationNames[i] == "default"){
+ continue;
+ }
+ animationHTML += "<form onsubmit='playAnimation(\"" + animationNames[i] + "\"); return false;'><input type='submit' value='" + animationNames[i] + "'/></form>";
+ }
+ animationControls.innerHTML = animationHTML;
+
+ var textureHTML = "<form id='textureSelectForm' action='body.html' method='get' onsubmit='return false;'>";
+ textureHTML += "<select id='textureSelect' onchange='textureSelectGo();' name='textureSelect'>";
+ if(baseTextureName == null){
+ textureHTML += "<option selected='selected' value='Default'>Default</option>";
+ } else {
+ textureHTML += "<option value='Default'>Default</option>";
+ }
+ for(var i=0; i < textureNames.length; i++){
+ var selectedText = textureNames[i] == baseTextureName ? "selected='selected'" : "";
+ textureHTML += "<option " + selectedText + " value='" + textureNames[i] + "'>" + textureNames[i] + "</option>";
+ }
+ textureHTML += "</select></form>";
+ textureSelectionDiv.innerHTML = textureHTML;
+
+ textureForm.action = appPath + "/account/" + ownerUsername + "/body/" + defaultBodyID + "/texture";
+
+ var bodySwitcherHTML = "<form id='bodySwitcherForm' action='body.html' method='get' onsubmit='return false;'>";
+ bodySwitcherHTML += "<select id='bodySwitcher' onchange='bodySwitcherGo();' name='bodySwitcher'>";
+ for(var i=0; i < bodyListXML.childNodes.length; i++){
+ var displayName = bodyListXML.childNodes[i].getAttribute("displayname");
+ var bodyConfigurationID = bodyListXML.childNodes[i].getAttribute("bodyconfigurationid");
+ var selected = bodyListXML.childNodes[i].getAttribute("bodyconfigurationid") == bodyXML.getAttribute("bodyconfigurationid");
+ var selectedText = selected ? " selected='selected'" : "";
+ bodySwitcherHTML += "<option " + selectedText + " value='" + bodyConfigurationID + "'>" + escapeHTML(displayName) + "</option>";
+ }
+ bodySwitcherHTML += "<option value='newBody'>New Body...</option>";
+ if(bodyListXML.childNodes.length > 1){
+ bodySwitcherHTML += "<option value='deleteBody'>Delete This Body...</option>";
+ }
+ bodySwitcherHTML += "</select></form>";
+ bodyListControl.innerHTML = bodySwitcherHTML;
+
+ var bodyDataHTML = "<form id='bodyDataForm' action='body.html' method='get' onsubmit='return false;'>";
+ bodyDataHTML += "<select id='bodyDataSelect' name='bodyDataSelect' onchange='bodyDataSelectGo();'>";
+ for(var i=0; i < bodyDataListXML.childNodes.length; i++){
+ var displayName = bodyDataListXML.childNodes[i].getAttribute("displayname");
+ var bodyDataID = bodyDataListXML.childNodes[i].getAttribute("bodydataid");
+ var selected = bodyXML.getAttribute("bodydataid") == bodyDataID;
+ var selectedText = selected ? " selected='selected'" : "";
+ bodyDataHTML += "<option " + selectedText + " value='" + bodyDataID + "'>" + escapeHTML(displayName) + "</option>";
+ }
+ bodyDataHTML += "</select>";
+ bodyDataHTML += "</form>";
+ bodyDataControl.innerHTML = bodyDataHTML;
+
+ topControlDiv.style.visibility = "visible";
+ bottomControlDiv.style.visibility = "visible";
+ leftControlDiv.style.visibility = "visible";
+ rightControlDiv.style.visibility = "visible";
+}
+
+function bodyDataSelectGo(){
+ var editor = document.getElementById("viewer");
+ var form = document.getElementById("bodyDataForm");
+ var selectedValue = +(form.bodyDataSelect.options[form.bodyDataSelect.selectedIndex].value);
+ var currentBodyDataID = +bodyXML.getAttribute("bodydataid");
+ if(selectedValue == currentBodyDataID){
+ alert("no change");
+ return;
+ }
+ editor.setBodyData(selectedValue);
+ requestBodyDocument(authedUsername, bodyXML.getAttribute("bodyconfigurationid"), handleBody);
+ return true;
+}
+
+function bodySwitcherGo(){
+ var editor = document.getElementById("viewer");
+ var form = document.getElementById("bodySwitcherForm");
+ var selectedValue = form.bodySwitcher.options[form.bodySwitcher.selectedIndex].value;
+ if(selectedValue == "newBody"){
+ alert("Show new body dialog");
+ return false;
+ } else if(selectedValue == "deleteBody"){
+ var answer = confirm("Really Delete This Body?");
+ if(!answer){
+ return false;
+ }
+ var currentDefaultBodyID = bodyXML.getAttribute("bodyconfigurationid");
+ var newDefaultBodyID = bodyListXML.childNodes[0].getAttribute("bodyconfigurationid");
+ if(newDefaultBodyID == currentDefaultBodyID){
+ newDefaultBodyID = bodyListXML.childNodes[1].getAttribute("bodyconfigurationid");
+ }
+ editor.setDefaultBodyConfiguration(+(newDefaultBodyID));
+ deleteBody(authedUsername, currentDefaultBodyID, handleBodyDeletion);
+ requestDefaultBodyDocument(authedUsername, handleBody);
+ return true;
+ }
+ var currentBodyConfigID = bodyXML.getAttribute("bodyconfigurationid");
+ if(selectedValue == currentBodyConfigID){
+ return true;
+ }
+ editor.setDefaultBodyConfiguration(+(selectedValue));
+ requestBodyDocument(authedUsername, selectedValue, handleBody);
+
+ return true;
+}
+
+function handleBodyDeletion(text){
+ requestDefaultBodyDocument(authedUsername, handleBody);
+}
+
+function textureSelectGo(){
+ var textureSelectForm = document.getElementById("textureSelectForm");
+ var selectedTextureName = textureSelectForm.textureSelect.options[textureSelectForm.textureSelect.selectedIndex].value;
+ var currentTextureName = bodyXML.getAttribute("basetexturename");
+ if(currentTextureName == selectedTextureName || (currentTextureName == null && selectedTextureName == "Default")){
+ return;
+ }
+ var editor = document.getElementById("viewer");
+ if(selectedTextureName == "Default"){
+ editor.setBaseTexture(null);
+ } else {
+ editor.setBaseTexture(selectedTextureName);
+ }
+ requestDefaultBodyDocument(authedUsername, handleBody);
+ return true;
+}
+
+function startedTextureForm() {
+ return true;
+}
+
+function completedTextureForm(response) {
+ repaintTexture();
+}
+
+function handleTextureForm(){
+ AIM.submit(textureForm, {'onStart' : startedTextureForm, 'onComplete' : completedTextureForm})
+ return true;
+}
+
+function textureDeleteGo(){
+ if(bodyXML == null){
+ return;
+ }
+ deleteBodyTexture(authedUsername, bodyXML.getAttribute("bodyconfigurationid"), handleTextureDelete);
+}
+
+function handleTextureDelete(){
+ repaintTexture();
+}
+
+function repaintTexture(){
+ var ogViewer = document.getElementById("viewer");
+ ogViewer.updateTextures();
+}
+
+function playAnimation(animationName){
+ var editor = document.getElementById("viewer");
+ editor.playAnimation(animationName);
+}
+
+function changeMorph(morphName, delta){
+ var editor = document.getElementById("viewer");
+ var settingValue = editor.getMorphSetting(morphName) + delta;
+ if(settingValue < 0) settingValue = 0;
+ if(settingValue > 1) settingValue = 1;
+ editor.setMorphSetting(morphName, settingValue);
+ var settingSpan = document.getElementById(morphName + " setting");
+ settingSpan.innerHTML = formatSettingValue(settingValue);
+}
+
+function formatSettingValue(settingValue){
+ return settingValue.toPrecision(2);
+}
+
+function writeApplet(){
+ if(loginCookie == null){
+ appletDiv.innerHTML = "No cookie. Please sign in or register as a guest.";
+ return;
+ }
+ var serviceURI = getServiceURI();
+ var html = "<applet id='viewer' codebase='" + serviceURI + "' code='com.ogoglio.bodyeditor.BodyEditorApplet' archive='ogoglio-common.jar,ogoglio-body-editor-applet.jar' width='300' height='400' mayscript='true'>";
+ html += "<param name='loginCookie' value='" + loginCookie + "' />";
+ html += "<param name='serviceURI' value='" + getServiceURI() + "' />";
+ html += "<param name='image' value='" + appPath + "/icons/32x32/face-monkey.png' />";
+ html += "</applet>";
+
+ appletDiv.innerHTML = html;
+}
+
+function doSave(){
+ var editor = document.getElementById("viewer");
+ if(editor == null){
+ return;
+ }
+ editor.saveBodyConfiguration();
+}
+
+function initBodyEditor(){
+ appletDiv = document.getElementById("appletDiv");
+ leftControlDiv = document.getElementById("leftControlDiv");
+ rightControlDiv = document.getElementById("rightControlDiv");
+ bottomControlDiv = document.getElementById("bottomControlDiv");
+ topControlDiv = document.getElementById("topControlDiv");
+ bodyListControl = document.getElementById("bodyListControl");
+ bodyDataControl = document.getElementById("bodyDataControl");
+ textureSelectionDiv = document.getElementById("textureSelectionDiv");
+ textureForm = document.getElementById("textureForm");
+ morphControls = document.getElementById("morphControls");
+ animationControls = document.getElementById("animationControls");
+
+ addAuthListeners(handleBodyAuth, handleBodyAuth);
+}
\ No newline at end of file
Modified: maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js 2007-10-30 00:18:24 UTC (rev 545)
+++ maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js 2007-10-30 00:18:29 UTC (rev 546)
@@ -791,6 +791,12 @@
manager.send(serializeXML(bodyXML));
}
+function deleteBody(username, bodyID, listener){
+ var manager = new XMLRequestManager(appPath + "/account/" + username + "/body/" + bodyID, new BasicHTTPListener(listener));
+ manager.setMethod("DELETE");
+ manager.send();
+}
+
function updateBodyDocument(xml, listener){
if(xml == null){
return;
@@ -810,6 +816,10 @@
manager.send();
}
+function requestBodyDataList(listener){
+ new XMLRequestManager(appPath + "/space/body", new BasicHTTPListener(listener)).send();
+}
+
// BEGIN POSSESSION UTILS
function requestPossession(username, possessionID, listener){
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-10-30 00:18:20
|
Revision: 545
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=545&view=rev
Author: trevorolio
Date: 2007-10-29 17:18:24 -0700 (Mon, 29 Oct 2007)
Log Message:
-----------
Updated the body editor so that you can choose a new body configuration and choose which body data to use as the base.
Still need to add the ability to add a body configuration.
Modified Paths:
--------------
maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java
Modified: maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java
===================================================================
--- maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java 2007-10-30 00:18:21 UTC (rev 544)
+++ maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/WebAPITest.java 2007-10-30 00:18:24 UTC (rev 545)
@@ -47,7 +47,7 @@
notAuthedAuthDoc = new AuthDocument("Ian", false);
authedAuthDoc = new AuthDocument("Ian", true);
- accountDoc = new AccountDocument(authedAuthDoc.getUsername(), AccountDocument.ACCOUNT_LEVEL_ADVANCED, null, null, null, null, null, AccountDocument.NO_TIME_VALUE, null, AccountDocument.NO_TIME_VALUE);
+ accountDoc = new AccountDocument(authedAuthDoc.getUsername(), AccountDocument.ACCOUNT_LEVEL_ADVANCED, null, null, null, null, null, AccountDocument.NO_TIME_VALUE, null, AccountDocument.NO_TIME_VALUE, 1);
} catch (URISyntaxException e) {
fail("Bad URIL: " + e);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tre...@us...> - 2007-10-30 00:18:20
|
Revision: 544
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=544&view=rev
Author: trevorolio
Date: 2007-10-29 17:18:21 -0700 (Mon, 29 Oct 2007)
Log Message:
-----------
Updated the body editor so that you can choose a new body configuration and choose which body data to use as the base.
Still need to add the ability to add a body configuration.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/PageRenderable.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AccountDocument.java
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -61,7 +61,7 @@
}
public AccountDocument createAccount(String username, String accountLevel, String firstName, String lastName, String homepage, String email, String password) throws IOException {
- AccountDocument newAccountDoc = new AccountDocument(username, accountLevel, firstName, lastName, homepage, password, email, AccountDocument.NO_TIME_VALUE, null, AccountDocument.NO_TIME_VALUE);
+ AccountDocument newAccountDoc = new AccountDocument(username, accountLevel, firstName, lastName, homepage, password, email, AccountDocument.NO_TIME_VALUE, null, AccountDocument.NO_TIME_VALUE, -1);
try {
XMLElement result = wire.sendAuthenticatedXML(descriptor.getAccountURI(), newAccountDoc.toString(), "POST", authenticator.getAuthCookie());
return new AccountDocument(result);
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -69,6 +69,12 @@
return bodyConfiguration;
}
+ public void setBodyConfiguration(BodyConfiguration bodyConfiguration){
+ ArgumentUtils.assertNotNull(bodyConfiguration);
+ this.bodyConfiguration = bodyConfiguration;
+ bodyConfiguration.setUser(this);
+ }
+
public String toString() {
return "User: " + username;
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DPageRenderable.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -31,6 +31,7 @@
import com.ogoglio.util.StreamUtils;
import com.ogoglio.viewer.render.PageRenderable;
import com.ogoglio.viewer.render.Renderable;
+import com.ogoglio.viewer.render.ThingRenderable;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.picking.PickTool;
@@ -42,8 +43,11 @@
private BrowserScreen screen = null;
- public J3DPageRenderable(Page page) {
+ private J3DThingRenderable thingRenderable = null;
+
+ public J3DPageRenderable(Page page, J3DThingRenderable thingRenderable) {
this.page = page;
+ this.thingRenderable = thingRenderable;
setCapability(BranchGroup.ALLOW_DETACH);
pageGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
pageGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
@@ -54,6 +58,10 @@
reloadContent();
}
+ public ThingRenderable getThingRenderable(){
+ return thingRenderable;
+ }
+
public void cleanup() {
//removeAllChildren();
//pageGroup.removeAllChildren();
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -264,7 +264,7 @@
Log.error("Tried to add a page to an unknown thing: " + page.getThing().getThingID());
return;
}
- J3DPageRenderable pageRenderable = new J3DPageRenderable(page);
+ J3DPageRenderable pageRenderable = new J3DPageRenderable(page, thingRenderable);
thingRenderable.addPageRenderable(pageRenderable);
}
@@ -727,7 +727,7 @@
Page[] pages = thing.getPages();
for (int i = 0; i < pages.length; i++) {
- J3DPageRenderable pageRenderable = new J3DPageRenderable(pages[i]);
+ J3DPageRenderable pageRenderable = new J3DPageRenderable(pages[i], renderable);
renderable.addPageRenderable(pageRenderable);
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -247,6 +247,7 @@
} else if (clickTarget.getRenderable() instanceof DoorRenderable) {
userInputListener.mouseClickedDoor(((DoorRenderable) clickTarget.getRenderable()).getDoor(), null, clickTarget.getIntersection());
} else if (clickTarget.getRenderable() instanceof PageRenderable) {
+ System.out.println("Clicked page: " + ((PageRenderable) clickTarget.getRenderable()).getPage());
userInputListener.mouseClickedPage(((PageRenderable) clickTarget.getRenderable()).getPage(), clickTarget.getIntersection());
} else {
throw new IllegalStateException("Clicked on a type of renderable we don't understand");
@@ -285,6 +286,9 @@
ShapeRenderable shape = (ShapeRenderable) clickTarget.getRenderable();
renderable = (ThingRenderable) shape.getRenderable();
name = shape.getName();
+ } else if(clickTarget.getRenderable() instanceof PageRenderable){
+ PageRenderable pageRenderable = (PageRenderable)clickTarget.getRenderable();
+ renderable = pageRenderable.getThingRenderable();
} else {
return;
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/PageRenderable.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/PageRenderable.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/PageRenderable.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -19,4 +19,5 @@
public Page getPage();
+ public ThingRenderable getThingRenderable();
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AccountDocument.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AccountDocument.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/AccountDocument.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -19,7 +19,7 @@
public class AccountDocument {
- public static final long NO_TIME_VALUE=-97; //indicates there is no time value
+ public static final long NO_TIME_VALUE = -97; //indicates there is no time value
public static final String ACCOUNT_LEVEL_BASIC = "basic";
@@ -34,7 +34,7 @@
public static final String NAME = "account";
public static final String USERNAME = "username";
-
+
public static final String ACCOUNT_LEVEL = "accountlevel";
public static final String FIRST_NAME = "firstname";
@@ -53,18 +53,20 @@
public static final String FROZEN_UNTIL = "frozenuntil";
+ public static final String BODY_CONFIGURATION_ID = "bodyconfigurationid";
+
XMLElement data = null;
- public AccountDocument(String username, String accountLevel, String firstName, String lastName, String homepage, String password, String email, long creationDate, String cookie, long frozenUntil) {
+ public AccountDocument(String username, String accountLevel, String firstName, String lastName, String homepage, String password, String email, long creationDate, String cookie, long frozenUntil, long bodyConfigurationID) {
data = new XMLElement(NAME);
if (username == null) {
throw new IllegalArgumentException("Bad username: " + username);
}
data.setAttribute(USERNAME, username);
-
+
if (accountLevel != null) {
- data.setAttribute(ACCOUNT_LEVEL, accountLevel);
+ data.setAttribute(ACCOUNT_LEVEL, accountLevel);
}
if (firstName != null)
@@ -82,22 +84,25 @@
if (creationDate != AccountDocument.NO_TIME_VALUE)
data.setAttribute(CREATION_DATE, creationDate);
- if (frozenUntil!=AccountDocument.NO_TIME_VALUE)
+ if (frozenUntil != AccountDocument.NO_TIME_VALUE)
data.setAttribute(FROZEN_UNTIL, frozenUntil);
+
+ if (bodyConfigurationID != -1)
+ data.setAttribute(BODY_CONFIGURATION_ID, bodyConfigurationID);
}
public AccountDocument(XMLElement data) {
if (data == null) {
throw new IllegalArgumentException("AuthDocument data is null");
}
- if (!NAME.equals(data.getName())) {
+ if (!NAME.equals(data.getName())) {
throw new IllegalArgumentException("AccountDocument data is not named Account: " + data.getName());
}
this.data = data;
}
public AccountDocument(String username) { //used when updating the document, with absent items indicating no change
- this(username, null, null, null, null, null, null, AccountDocument.NO_TIME_VALUE, null, AccountDocument.NO_TIME_VALUE);
+ this(username, null, null, null, null, null, null, AccountDocument.NO_TIME_VALUE, null, AccountDocument.NO_TIME_VALUE, -1);
}
public XMLElement toElement() {
@@ -111,71 +116,83 @@
public String getUsername() {
return data.getStringAttribute(USERNAME);
}
-
+
public void setAccountLevel(String level) {
data.setAttribute(ACCOUNT_LEVEL, level);
}
public String getAccountLevel() {
- return data.getStringAttribute(ACCOUNT_LEVEL);
+ return data.getStringAttribute(ACCOUNT_LEVEL);
}
- public String getFirstName(){
+ public String getFirstName() {
return data.getStringAttribute(FIRST_NAME);
}
- public String getLastName(){
+ public String getLastName() {
return data.getStringAttribute(LAST_NAME);
}
-
+
public String getHomepage() {
return data.getStringAttribute(HOMEPAGE);
}
-
+
public String getPassword() {
return data.getStringAttribute(PASSWORD);
}
-
+
public String getEmail() {
return data.getStringAttribute(EMAIL);
}
-
+
public String getCookie() {
return data.getStringAttribute(COOKIE);
}
-
+
public Date getCreationDate() {
long value = data.getLongAttribute(CREATION_DATE, -1);
- if(value == -1) {
+ if (value == -1) {
return null;
}
return new Date(value);
}
-
+
public Date getFrozenUntil() {
long value = data.getLongAttribute(FROZEN_UNTIL, -1);
- if(value == -1) {
+ if (value == -1) {
return null;
}
return new Date(value);
}
public void setFrozenUntil(Date date) {
- if(date == null) {
+ if (date == null) {
data.removeAttribute(FROZEN_UNTIL);
} else {
data.setAttribute(FROZEN_UNTIL, date.getTime());
}
}
+ public long getBodyConfigurationID(){
+ return data.getLongAttribute(BODY_CONFIGURATION_ID);
+ }
+
+ public void setBodyConfigurationID(long id){
+ if(id < 0){
+ data.removeAttribute(BODY_CONFIGURATION_ID);
+ } else {
+ data.setAttribute(BODY_CONFIGURATION_ID, id);
+ }
+ }
+
public int hashCode() {
return getUsername().hashCode();
}
-
+
public boolean equals(Object obj) {
- if(obj == null || !(obj instanceof AccountDocument)) {
+ if (obj == null || !(obj instanceof AccountDocument)) {
return false;
}
- return getUsername().equals(((AccountDocument)obj).getUsername());
+ return getUsername().equals(((AccountDocument) obj).getUsername());
}
}
\ No newline at end of file
Modified: maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java
===================================================================
--- maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java 2007-10-27 23:33:47 UTC (rev 543)
+++ maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java 2007-10-30 00:18:21 UTC (rev 544)
@@ -86,7 +86,7 @@
}
public void testAccountDocument() {
- AccountDocument doc1 = new AccountDocument(username1, accountLevel1, firstName1, lastName1, company1, password1, email1, creationDate1, cookie1, frozenUntil1);
+ AccountDocument doc1 = new AccountDocument(username1, accountLevel1, firstName1, lastName1, company1, password1, email1, creationDate1, cookie1, frozenUntil1, 1);
XMLElement element = new XMLElement();
element.parseString(doc1.toString());
AccountDocument doc2 = new AccountDocument(element);
@@ -104,6 +104,7 @@
assertEquals(doc1.getPassword(), doc2.getPassword());
assertEquals(doc1.getUsername(), doc2.getUsername());
assertEquals(doc1.getAccountLevel(), doc2.getAccountLevel());
+ assertEquals(doc1.getBodyConfigurationID(), doc2.getBodyConfigurationID());
}
public void testAuthDocument() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|