JavaCAD
Cube.java
Go to the documentation of this file.
1 
34 package eu.mihosoft.vrl.v3d;
35 
36 import java.util.ArrayList;
37 import java.util.List;
38 
39 import eu.mihosoft.vrl.v3d.parametrics.LengthParameter;
40 import eu.mihosoft.vrl.v3d.parametrics.Parameter;
41 
42 // TODO: Auto-generated Javadoc
49 public class Cube extends Primitive {
50 
54  private Vector3d center;
59 
61  private boolean centered = true;
62 
69  public Cube() {
70  center = new Vector3d(0, 0, 0);
71  dimensions = new Vector3d(1, 1, 1);
72  }
73 
80  public Cube(double size) {
81  center = new Vector3d(0, 0, 0);
82  dimensions = new Vector3d(size, size, size);
83  }
84 
93  this.center = center;
94  this.dimensions = dimensions;
95  }
96 
105  public Cube(double w, double h, double d) {
106  this(Vector3d.ZERO, new Vector3d(w, h, d));
107  }
109  this(Vector3d.ZERO, new Vector3d(w.getMM(), h.getMM(), d.getMM()));
110  parametrics.add(w);
111  parametrics.add(h);
112  parametrics.add(d);
113  }
114  public Cube(LengthParameter size) {
115  this(size,size,size);
116  }
117  /* (non-Javadoc)
118  * @see eu.mihosoft.vrl.v3d.Primitive#toPolygons()
119  */
120  @Override
121  public List<Polygon> toPolygons() {
122  if(dimensions.x<=0)
123  throw new NumberFormatException("X can not be negative");
124  if(dimensions.y<=0)
125  throw new NumberFormatException("Y can not be negative");
126  if(dimensions.z<=0)
127  throw new NumberFormatException("Z can not be negative");
128  int[][][] a = {
129  // position // normal
130  {{0, 4, 6, 2}, {-1, 0, 0}},
131  {{1, 3, 7, 5}, {+1, 0, 0}},
132  {{0, 1, 5, 4}, {0, -1, 0}},
133  {{2, 6, 7, 3}, {0, +1, 0}},
134  {{0, 2, 3, 1}, {0, 0, -1}},
135  {{4, 5, 7, 6}, {0, 0, +1}}
136  };
137  List<Polygon> polygons = new ArrayList<>();
138  for (int[][] info : a) {
139  List<Vertex> vertices = new ArrayList<>();
140  for (int i : info[0]) {
141  Vector3d pos = new Vector3d(
142  center.x + dimensions.x * (1 * Math.min(1, i & 1) - 0.5),
143  center.y + dimensions.y * (1 * Math.min(1, i & 2) - 0.5),
144  center.z + dimensions.z * (1 * Math.min(1, i & 4) - 0.5)
145  );
146  vertices.add(new Vertex(pos, new Vector3d(
147  (double) info[1][0],
148  (double) info[1][1],
149  (double) info[1][2]
150  )));
151  }
152  polygons.add(new Polygon(vertices, properties));
153  }
154 
155  if (!centered) {
156 
157  Transform centerTransform = Transform.unity().translate(dimensions.x / 2.0, dimensions.y / 2.0, dimensions.z / 2.0);
158 
159  for (Polygon p : polygons) {
160  p.transform(centerTransform);
161  }
162  }
163 
164  return polygons;
165  }
166 
172  public Vector3d getCenter() {
173  return center;
174  }
175 
182  this.center = center;
183  return this;
184  }
185 
192  return dimensions;
193  }
194 
201  this.dimensions = dimensions;
202  return this;
203  }
204 
205  /* (non-Javadoc)
206  * @see eu.mihosoft.vrl.v3d.Primitive#getProperties()
207  */
208  @Override
210  return properties;
211  }
212 
217  public Cube noCenter() {
218  centered = false;
219  return this;
220  }
221 
222 }
Cube(double size)
Definition: Cube.java:80
Vector3d getCenter()
Definition: Cube.java:172
PropertyStorage getProperties()
Definition: Cube.java:209
Vector3d getDimensions()
Definition: Cube.java:191
Cube(LengthParameter size)
Definition: Cube.java:114
List< Polygon > toPolygons()
Definition: Cube.java:121
Cube setDimensions(Vector3d dimensions)
Definition: Cube.java:200
final PropertyStorage properties
Definition: Cube.java:64
Cube setCenter(Vector3d center)
Definition: Cube.java:181
Cube(Vector3d center, Vector3d dimensions)
Definition: Cube.java:92
Cube(double w, double h, double d)
Definition: Cube.java:105
Cube(LengthParameter w, LengthParameter h, LengthParameter d)
Definition: Cube.java:108
Vector3d transform(Vector3d vec)
Definition: Transform.java:468
Transform translate(Vector3d vec)
Definition: Transform.java:187
static Transform unity()
Definition: Transform.java:85
static Vector3d y(double y)
Definition: Vector3d.java:484
static final Vector3d ZERO
Definition: Vector3d.java:57
static Vector3d z(double z)
Definition: Vector3d.java:494
static Vector3d x(double x)
Definition: Vector3d.java:474