1 /* 2 * Copyright (c) 2009-2010 jMonkeyEngine 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 package com.jme3.scene.shape; 34 35 import com.jme3.export.InputCapsule; 36 import com.jme3.export.JmeExporter; 37 import com.jme3.export.JmeImporter; 38 import com.jme3.export.OutputCapsule; 39 import com.jme3.math.Vector3f; 40 import com.jme3.scene.Mesh; 41 import com.jme3.scene.VertexBuffer; 42 import com.jme3.scene.VertexBuffer.Type; 43 import java.io.IOException; 44 import java.nio.FloatBuffer; 45 46 /** 47 * A simple line implementation with a start and an end. 48 * 49 * @author Brent Owens 50 */ 51 public class Line extends Mesh { 52 53 private Vector3f start; 54 private Vector3f end; 55 56 public Line() { 57 } 58 59 public Line(Vector3f start, Vector3f end) { 60 setMode(Mode.Lines); 61 updateGeometry(start, end); 62 } 63 64 protected void updateGeometry(Vector3f start, Vector3f end) { 65 this.start = start; 66 this.end = end; 67 setBuffer(Type.Position, 3, new float[]{start.x, start.y, start.z, 68 end.x, end.y, end.z,}); 69 70 71 setBuffer(Type.TexCoord, 2, new float[]{0, 0, 72 1, 1}); 73 74 setBuffer(Type.Normal, 3, new float[]{0, 0, 1, 75 0, 0, 1}); 76 77 setBuffer(Type.Index, 3, new short[]{0, 1}); 78 79 updateBound(); 80 } 81 82 /** 83 * Update the start and end points of the line. 84 */ 85 public void updatePoints(Vector3f start, Vector3f end) { 86 VertexBuffer posBuf = getBuffer(Type.Position); 87 88 FloatBuffer fb = (FloatBuffer) posBuf.getData(); 89 90 fb.put(start.x).put(start.y).put(start.z); 91 fb.put(end.x).put(end.y).put(end.z); 92 93 posBuf.updateData(fb); 94 95 updateBound(); 96 } 97 98 public Vector3f getEnd() { 99 return end; 100 } 101 102 public Vector3f getStart() { 103 return start; 104 } 105 106 @Override 107 public void write(JmeExporter ex) throws IOException { 108 super.write(ex); 109 OutputCapsule out = ex.getCapsule(this); 110 111 out.write(start, "startVertex", null); 112 out.write(end, "endVertex", null); 113 } 114 115 @Override 116 public void read(JmeImporter im) throws IOException { 117 super.read(im); 118 InputCapsule in = im.getCapsule(this); 119 120 start = (Vector3f) in.readSavable("startVertex", null); 121 end = (Vector3f) in.readSavable("endVertex", null); 122 } 123 } 124