Package org.jzy3d.plot3d.primitives
Class Geometry
- java.lang.Object
-
- org.jzy3d.plot3d.primitives.Drawable
-
- org.jzy3d.plot3d.primitives.Wireframeable
-
- org.jzy3d.plot3d.primitives.Geometry
-
- All Implemented Interfaces:
IMultiColorable
,ISingleColorable
,IGLRenderer
,ISortableDraw
public abstract class Geometry extends Wireframeable implements ISingleColorable, IMultiColorable
-
-
Field Summary
Fields Modifier and Type Field Description protected Coord3d
center
protected Color
color
protected ColorMapper
mapper
static boolean
NORMAL_AUTO_DEFAULT
Default setting ofsetNormalProcessingAutomatic(boolean)
.static Color
NORMAL_END_COLOR
static int
NORMAL_LINE_WIDTH
static int
NORMAL_POINT_WIDTH
static Color
NORMAL_START_COLOR
static boolean
NORMALIZE_NORMAL_DEFAULT
Default setting ofsetNormalizeNormals(boolean)
.protected boolean
normalizeNormals
protected Normal.NormalPer
normalPer
protected boolean
normalProcessingAutomatic
protected List<Coord3d>
normals
protected List<Point>
points
protected PolygonMode
polygonMode
static boolean
SHOW_NORMALS
A flag to show normals for debugging lightingstatic boolean
SPLIT_TRIANGLE_DEFAULT
Default setting ofsetSplitInTriangles(boolean)
.protected boolean
splitInTriangles
-
Fields inherited from class org.jzy3d.plot3d.primitives.Wireframeable
depthFunctionChangeForWireframe, faceDisplayed, materialAmbiantReflection, materialDiffuseReflection, materialEmission, materialShininess, materialSpecularReflection, NO_OVERLAP_DEPTH_RATIO, polygonOffsetFactor, polygonOffsetFillEnable, polygonOffsetUnit, polygonWireframeDepthTrick, reflectLight, wireframeColor, wireframeColorFromPolygonPoints, wireframeDisplayed, wireframeWidth, wireframeWithLineLoop
-
Fields inherited from class org.jzy3d.plot3d.primitives.Drawable
bbox, boundingBoxColor, boundingBoxDisplayed, displayed, hasListeners, legend, legendDisplayed, listeners, spaceTransformer, transform, transformBefore
-
-
Constructor Summary
Constructors Constructor Description Geometry()
Initializes an emptyGeometry
with face status defaulting to true, and wireframe status defaulting to false.Geometry(int n)
Geometry(List<Point> points)
Geometry(Color wireframeColor, boolean wireframeDisplayed, Point... points)
Geometry(Color wireframeColor, Color faceColor, Coord3d... points)
Geometry(Color wireframeColor, Point... points)
Geometry(Point... points)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
add(float x, float y, float z)
void
add(List<Point> points)
void
add(Color faceColor, Coord3d... coords)
void
add(Coord3d coord)
void
add(Coord3d coord, Color color, boolean updateBounds)
void
add(Point point)
void
add(Point... points)
void
add(Point point, boolean updateBounds)
Add a point to the polygon.void
applyGeometryTransform(Transform transform)
protected void
applyPointOrMapperColor(IPainter painter, Point p)
Apply mapper color if a mapper is defined and store the result in the point color, or use point color if mapper is undefined.protected abstract void
begin(IPainter painter)
Invoke GL begin with the actual geometry typeGL#GL_POINTS
,GL#GL_LINES
,GL#GL_TRIANGLES
,GL2#GL_POLYGON
...protected void
callPointForWireframe(IPainter painter)
Drawing the point list in wireframe modeprotected void
callPointsForFace(IPainter painter)
Drawing the point list in face mode (polygon content)protected void
callPointsForFace_NoSplit(IPainter painter)
protected void
callPointsForFace_NoSplit_NoNormal(IPainter painter)
protected void
callPointsForFace_NoSplit_NormalAuto(IPainter painter)
protected void
callPointsForFace_NoSplit_NormalSupplied(IPainter painter)
protected void
callPointsForFace_SplitInTriangle(IPainter painter)
protected void
callPointsForFace_SplitInTriangle_NormalAuto(IPainter painter, Point p1, Point p2, Point p3)
protected void
callPointsForFace_SplitInTriangle_NormalSupplied(IPainter painter, Point p1, Point p2, Point p3, int t)
protected Coord3d
computeNormalAutomatic(List<Point> points)
protected Coord3d
computeNormalAutomatic(Point p1, Point p2, Point p3)
void
draw(IPainter painter)
Call OpenGL2 routines for rendering the object.protected void
drawFace(IPainter painter)
protected void
drawNormal(IPainter painter, Coord3d start, Coord3d end)
protected void
drawPolygonNormal(IPainter painter, List<Point> points, List<Coord3d> normal)
protected void
drawPolygonNormal(IPainter painter, List<Point> points, Coord3d normal)
protected void
drawTriangleNormal(IPainter painter, Point p1, Point p2, Point p3, Coord3d normal)
protected void
drawTriangleNormal(IPainter painter, Point p1, Point p2, Point p3, Coord3d n1, Coord3d n2, Coord3d n3)
protected void
drawWireframe(IPainter painter)
boolean
equals(Object obj)
Point
get(int p)
Coord3d
getBarycentre()
Return the barycentre of this object, which is computed as the center of its bounding box.Color
getColor()
Get the color.ColorMapper
getColorMapper()
Get the colormapper.Coord3d[]
getCoordArray()
Returns an array of the mutable coordinates held by this polygon points.List<Coord3d>
getCoordList()
Returns a list of the mutable coordinates held by this polygon points.Set<Coord3d>
getCoordSet()
Returns a set of the mutable coordinates held by this polygon points.double
getDistance(Camera camera)
Return the distance of the object center to theCamera
's eye.double
getLongestDistance(Camera camera)
List<Coord3d>
getNormals()
List<Point>
getPoints()
Returns the list of the mutable points held by this polygon.Set<Point>
getPointSet()
Returns a set of the mutable points held by this polygon.PolygonMode
getPolygonMode()
double
getShortestDistance(Camera camera)
int
hashCode()
boolean
isNormalizeNormals()
boolean
isNormalProcessingAutomatic()
Normal processing is false by default, and becomes true as soon as one provide normals throughsetNormals(List, NormalPer)
boolean
isSplitInTriangles()
void
setColor(Color color)
Set the color.void
setColorMapper(ColorMapper mapper)
Set the colormapper that will be used by the Drawable, instead of using precomputed colors.void
setNormal(Coord3d normals)
void
setNormalizeNormals(boolean normalizeNormals)
Normalizing normals is usefull to ensure that polygons of different sizes will have a consistent light reflection.void
setNormalProcessingAutomatic(boolean normalProcessingAutomatic)
Set normal processing to be automatic or not.void
setNormals(List<Coord3d> normals, Normal.NormalPer normalPer)
Provides normals for this geometry.void
setPolygonMode(PolygonMode polygonMode)
A null polygonMode imply no any call to gl.glPolygonMode(...) at renderingvoid
setReflectLight(boolean reflectLight)
If true, drawing this object will set ambient, diffuse, specular and shininess parameters.void
setSplitInTriangles(boolean splitInTriangles)
Splitting a polygon in multiple triangles is said to be better to adress complex rendering issues in OpenGL, but has a (very small) overhead.int
size()
String
toString(int depth)
void
updateBounds()
-
Methods inherited from class org.jzy3d.plot3d.primitives.Wireframeable
applyDepthRangeDefault, applyDepthRangeForOverlying, applyDepthRangeForUnderlying, applyMaterial, doDrawBoundsIfDisplayed, getMaterialAmbiantReflection, getMaterialDiffuseReflection, getMaterialEmission, getMaterialShininess, getMaterialSpecularReflection, getPolygonOffsetFactor, getPolygonOffsetUnit, getWireframeColor, getWireframeWidth, isFaceDisplayed, isPolygonOffsetFillEnable, isPolygonWireframeDepthTrick, isReflectLight, isWireframeColorFromPolygonPoints, isWireframeDisplayed, polygonOffsetFillDisable, polygonOffsetFillEnable, polygonOffsetLineDisable, polygonOffsetLineEnable, setFaceDisplayed, setMaterialAmbiantReflection, setMaterialDiffuseReflection, setMaterialEmission, setMaterialShininess, setMaterialSpecularReflection, setPolygonOffsetFactor, setPolygonOffsetFillEnable, setPolygonOffsetUnit, setPolygonWireframeDepthTrick, setWireframeColor, setWireframeColorFromPolygonPoints, setWireframeDisplayed, setWireframeWidth
-
Methods inherited from class org.jzy3d.plot3d.primitives.Drawable
addDrawableListener, asWireframeable, dispose, doTransform, fireDrawableChanged, fireDrawableChanged, getBoundingBoxColor, getBounds, getLegend, getSpaceTransformer, getTransform, getTransformBefore, hasLegend, isBoundingBoxDisplayed, isDisplayed, isLegendDisplayed, removeDrawableListener, setBoundingBoxColor, setBoundingBoxDisplayed, setDisplayed, setLegend, setLegendDisplayed, setSpaceTransformer, setTransform, setTransformBefore, toString
-
-
-
-
Field Detail
-
NORMAL_AUTO_DEFAULT
public static boolean NORMAL_AUTO_DEFAULT
Default setting ofsetNormalProcessingAutomatic(boolean)
. Can be globally changed to avoid setting it geometry-wise.
-
SPLIT_TRIANGLE_DEFAULT
public static boolean SPLIT_TRIANGLE_DEFAULT
Default setting ofsetSplitInTriangles(boolean)
. Can be globally changed to avoid setting it geometry-wise.
-
NORMALIZE_NORMAL_DEFAULT
public static boolean NORMALIZE_NORMAL_DEFAULT
Default setting ofsetNormalizeNormals(boolean)
. Can be globally changed to avoid setting it geometry-wise.
-
SHOW_NORMALS
public static boolean SHOW_NORMALS
A flag to show normals for debugging lighting
-
NORMAL_LINE_WIDTH
public static int NORMAL_LINE_WIDTH
-
NORMAL_POINT_WIDTH
public static int NORMAL_POINT_WIDTH
-
NORMAL_END_COLOR
public static Color NORMAL_END_COLOR
-
NORMAL_START_COLOR
public static Color NORMAL_START_COLOR
-
polygonMode
protected PolygonMode polygonMode
-
mapper
protected ColorMapper mapper
-
color
protected Color color
-
center
protected Coord3d center
-
normalProcessingAutomatic
protected boolean normalProcessingAutomatic
-
splitInTriangles
protected boolean splitInTriangles
-
normalizeNormals
protected boolean normalizeNormals
-
normalPer
protected Normal.NormalPer normalPer
-
-
Method Detail
-
setReflectLight
public void setReflectLight(boolean reflectLight)
Description copied from class:Wireframeable
If true, drawing this object will set ambient, diffuse, specular and shininess parameters. If the drawable has no normal defined, then the normal will be automatically processed.- Overrides:
setReflectLight
in classWireframeable
-
setNormals
public void setNormals(List<Coord3d> normals, Normal.NormalPer normalPer)
Provides normals for this geometry. Manually setting normals will disable automatic normal processing. Not providing normals will keep the default automatic normal processing active. You may more simply set a single normal for this geometry by callingsetNormal(Coord3d)
- Parameters:
normals
-normalPer
- indicate if the supplied normals are given per vertex or per geometry. The ability to provide a list is kept for the case where one wishes to {@link #setSplitInTriangles(true)}.
-
setNormal
public void setNormal(Coord3d normals)
-
isNormalProcessingAutomatic
public boolean isNormalProcessingAutomatic()
Normal processing is false by default, and becomes true as soon as one provide normals throughsetNormals(List, NormalPer)
- Returns:
-
setNormalProcessingAutomatic
public void setNormalProcessingAutomatic(boolean normalProcessingAutomatic)
Set normal processing to be automatic or not.- Parameters:
normalProcessingAutomatic
-
-
draw
public void draw(IPainter painter)
Description copied from class:Drawable
Call OpenGL2 routines for rendering the object.- Specified by:
draw
in interfaceIGLRenderer
- Specified by:
draw
in classDrawable
-
drawFace
protected void drawFace(IPainter painter)
-
callPointsForFace
protected void callPointsForFace(IPainter painter)
Drawing the point list in face mode (polygon content)
-
callPointsForFace_NoSplit
protected void callPointsForFace_NoSplit(IPainter painter)
-
callPointsForFace_NoSplit_NormalSupplied
protected void callPointsForFace_NoSplit_NormalSupplied(IPainter painter)
-
callPointsForFace_NoSplit_NormalAuto
protected void callPointsForFace_NoSplit_NormalAuto(IPainter painter)
-
callPointsForFace_NoSplit_NoNormal
protected void callPointsForFace_NoSplit_NoNormal(IPainter painter)
-
callPointsForFace_SplitInTriangle
protected void callPointsForFace_SplitInTriangle(IPainter painter)
-
callPointsForFace_SplitInTriangle_NormalSupplied
protected void callPointsForFace_SplitInTriangle_NormalSupplied(IPainter painter, Point p1, Point p2, Point p3, int t)
-
callPointsForFace_SplitInTriangle_NormalAuto
protected void callPointsForFace_SplitInTriangle_NormalAuto(IPainter painter, Point p1, Point p2, Point p3)
-
applyPointOrMapperColor
protected void applyPointOrMapperColor(IPainter painter, Point p)
Apply mapper color if a mapper is defined and store the result in the point color, or use point color if mapper is undefined.
-
drawPolygonNormal
protected void drawPolygonNormal(IPainter painter, List<Point> points, Coord3d normal)
-
drawPolygonNormal
protected void drawPolygonNormal(IPainter painter, List<Point> points, List<Coord3d> normal)
-
drawTriangleNormal
protected void drawTriangleNormal(IPainter painter, Point p1, Point p2, Point p3, Coord3d normal)
-
drawTriangleNormal
protected void drawTriangleNormal(IPainter painter, Point p1, Point p2, Point p3, Coord3d n1, Coord3d n2, Coord3d n3)
-
drawWireframe
protected void drawWireframe(IPainter painter)
-
callPointForWireframe
protected void callPointForWireframe(IPainter painter)
Drawing the point list in wireframe mode
-
begin
protected abstract void begin(IPainter painter)
Invoke GL begin with the actual geometry typeGL#GL_POINTS
,GL#GL_LINES
,GL#GL_TRIANGLES
,GL2#GL_POLYGON
...
-
add
public void add(float x, float y, float z)
-
add
public void add(Coord3d coord)
-
add
public void add(Point point)
-
add
public void add(Point point, boolean updateBounds)
Add a point to the polygon.
-
add
public void add(Point... points)
-
applyGeometryTransform
public void applyGeometryTransform(Transform transform)
- Specified by:
applyGeometryTransform
in classDrawable
-
updateBounds
public void updateBounds()
- Specified by:
updateBounds
in classDrawable
-
getBarycentre
public Coord3d getBarycentre()
Description copied from class:Drawable
Return the barycentre of this object, which is computed as the center of its bounding box. If the bounding box is not available, the returned value isCoord3d.INVALID
- Overrides:
getBarycentre
in classDrawable
- Returns:
- the center of the bounding box, or
Coord3d.INVALID
.
-
get
public Point get(int p)
-
getPoints
public List<Point> getPoints()
Returns the list of the mutable points held by this polygon.
-
getPointSet
public Set<Point> getPointSet()
Returns a set of the mutable points held by this polygon.
-
getCoordSet
public Set<Coord3d> getCoordSet()
Returns a set of the mutable coordinates held by this polygon points.
-
getCoordList
public List<Coord3d> getCoordList()
Returns a list of the mutable coordinates held by this polygon points.
-
getCoordArray
public Coord3d[] getCoordArray()
Returns an array of the mutable coordinates held by this polygon points.
-
size
public int size()
-
getDistance
public double getDistance(Camera camera)
Description copied from class:Drawable
Return the distance of the object center to theCamera
's eye.- Specified by:
getDistance
in interfaceISortableDraw
- Overrides:
getDistance
in classDrawable
-
getShortestDistance
public double getShortestDistance(Camera camera)
- Specified by:
getShortestDistance
in interfaceISortableDraw
- Overrides:
getShortestDistance
in classDrawable
-
getLongestDistance
public double getLongestDistance(Camera camera)
- Specified by:
getLongestDistance
in interfaceISortableDraw
- Overrides:
getLongestDistance
in classDrawable
-
getPolygonMode
public PolygonMode getPolygonMode()
-
setPolygonMode
public void setPolygonMode(PolygonMode polygonMode)
A null polygonMode imply no any call to gl.glPolygonMode(...) at rendering
-
setColorMapper
public void setColorMapper(ColorMapper mapper)
Description copied from interface:IMultiColorable
Set the colormapper that will be used by the Drawable, instead of using precomputed colors.- Specified by:
setColorMapper
in interfaceIMultiColorable
-
getColorMapper
public ColorMapper getColorMapper()
Description copied from interface:IMultiColorable
Get the colormapper.- Specified by:
getColorMapper
in interfaceIMultiColorable
-
setColor
public void setColor(Color color)
Description copied from interface:ISingleColorable
Set the color.- Specified by:
setColor
in interfaceISingleColorable
- Parameters:
color
- the color
-
getColor
public Color getColor()
Description copied from interface:ISingleColorable
Get the color.- Specified by:
getColor
in interfaceISingleColorable
- Returns:
- color the color.
-
isSplitInTriangles
public boolean isSplitInTriangles()
-
setSplitInTriangles
public void setSplitInTriangles(boolean splitInTriangles)
Splitting a polygon in multiple triangles is said to be better to adress complex rendering issues in OpenGL, but has a (very small) overhead.
-
isNormalizeNormals
public boolean isNormalizeNormals()
-
setNormalizeNormals
public void setNormalizeNormals(boolean normalizeNormals)
Normalizing normals is usefull to ensure that polygons of different sizes will have a consistent light reflection. Indeed, a large polygon will have a high normal value compared to a small polygon. Normalizing requires a bit more computation though. This setting will only change something as long as- The object is configured to {@link #setReflectLight(true)} and if a
Light
is added to the chart. - The object is configured to {@link #setNormalProcessingAutomatic(true)}. Normals processed externally should be normalized externally.
- The object is configured to {@link #setReflectLight(true)} and if a
-
-