use of org.scijava.java3d.GeometryArray in project GDSC-SMLM by aherbert.
the class TransparentItemTriangleMesh method setItemColor4.
@Override
public void setItemColor4(Color4f[] color) {
this.color = null;
final int size = size();
ItemHelper.checkSize(color.length, size);
final GeometryArray ga = (GeometryArray) getGeometry();
if (ga == null) {
return;
}
final int objectSize = objectVertices.length;
final int N = objectSize * size;
final Color4f[] colors = new Color4f[N];
int index = 0;
for (final Color4f c : color) {
for (int j = objectSize; j-- > 0; ) {
colors[index++] = c;
}
}
ga.setColors(0, colors);
changed = true;
}
use of org.scijava.java3d.GeometryArray in project GDSC-SMLM by aherbert.
the class TransparentItemTriangleMesh method getItemAlpha.
@Override
public void getItemAlpha(float[] alpha) {
final int size = size();
ItemHelper.checkSize(alpha.length, size);
final GeometryArray ga = (GeometryArray) getGeometry();
if (ga == null) {
return;
}
final int objectSize = objectVertices.length;
final int N = objectSize * size;
final float[] colors = new float[N * 4];
ga.getColors(0, colors);
for (int i = 0; i < size; i++) {
// Get only alpha
alpha[i] = colors[i * 4 * objectSize + 3];
}
}
use of org.scijava.java3d.GeometryArray in project GDSC-SMLM by aherbert.
the class Shape3DHelper method getIndexedNormals.
/**
* Gets the normals assuming triangle vertices.
*
* @param vertices the vertices
* @param creaseAngle the crease angle (in degrees; 0=facet normals; 180=smooth shading)
* @return the normals
*/
public static Pair<Vector3f[], int[]> getIndexedNormals(Point3f[] vertices, double creaseAngle) {
final int nVertices = vertices.length;
final GeometryArray ta = new TriangleArray(nVertices, GeometryArray.COORDINATES);
ta.setCoordinates(0, vertices);
final GeometryInfo gi = new GeometryInfo(ta);
final NormalGenerator ng = new NormalGenerator();
if (creaseAngle >= 0 && creaseAngle <= 180) {
ng.setCreaseAngle(Math.toRadians(creaseAngle));
}
ng.generateNormals(gi);
return Pair.of(gi.getNormals(), gi.getNormalIndices());
}
use of org.scijava.java3d.GeometryArray in project GDSC-SMLM by aherbert.
the class TransparentItemPointMesh method getItemAlpha.
@Override
public void getItemAlpha(float[] alpha) {
final int size = size();
ItemHelper.checkSize(alpha.length, size);
final GeometryArray ga = (GeometryArray) getGeometry();
if (ga == null) {
return;
}
final float[] colors = new float[4 * size];
ga.getColors(0, colors);
for (int i = 0; i < size; i++) {
// Get only alpha
alpha[i] = colors[i * 4 + 3];
}
}
use of org.scijava.java3d.GeometryArray in project GDSC-SMLM by aherbert.
the class TransparentItemPointMesh method createGeometry.
@Override
protected GeometryArray createGeometry() {
if (mesh == null || mesh.isEmpty()) {
return null;
}
final int size = size();
final Point3f[] coords = new Point3f[size];
mesh.toArray(coords);
final Color4f[] colors = new Color4f[size];
if (color == null) {
color = DEFAULT_COLOR;
}
Arrays.fill(colors, new Color4f(color.x, color.y, color.z, 1));
final GeometryArray ta = new PointArray(size, GeometryArray.COORDINATES | GeometryArray.COLOR_4);
ta.setValidVertexCount(size);
ta.setCoordinates(0, coords);
ta.setColors(0, colors);
ta.setCapability(GeometryArray.ALLOW_COLOR_WRITE);
ta.setCapability(GeometryArray.ALLOW_COORDINATE_WRITE);
ta.setCapability(GeometryArray.ALLOW_COUNT_WRITE);
ta.setCapability(GeometryArray.ALLOW_COUNT_READ);
ta.setCapability(Geometry.ALLOW_INTERSECT);
return ta;
}
Aggregations