DMelt:Plots/JavaView

From HandWiki
Member



Using JavaView

3D geometry viewer and a mathematical visualization software, called JavaView (http://www.javaview.de/) can be used with the class jhplot.HJavaView jhplot.HJavaView. It should be noticed that the license of JavaView should be put to the file "lib/javaview/rsrc/jv-lic.lic" relative to DataMelt installation. Without this license, the program is fully functional but you will see a message dialog about the license.

The package allows:

Visualize and study your own geometry models. The data files may reside on your local computer or somewhere on the internet. Simply browse your local disk or type the URL of a model using a web form.

  • Solve ordinary differential equations interactively.
  • Calculate the zero points of functions.
  • Measure distances on curved polyhedral surfaces using straightest or shortest geodesic lines.
  • Computes algebraic surfaces given as zero set of a polynomial function.


DataMelt allows programming and visualizing 3D mathematical objects using the Python language (as well as Groovy, Ruby). Here is a Jython example that shows a snail in 3D interactive viewer:

DMelt example: Show 3D snail using JavaView project

The code is shown below:

from jv.geom import PgElementSet
from jhplot import HJavaView

obj = PgElementSet(3);
obj.setName("snail");
obj.computeSnail(40, 30, 2.0);
#obj.computeSphere(40, 10, 2.0);
obj.flipOrientation();
obj.makeVertexNormals();
obj.makeElementNormals();
obj.makeElementColorsFromZ();
obj.showElementColors(True);
obj.showElementBackColor(True);
obj.setTransparency(0.1);
obj.showTransparency(True);
obj.showSmoothElementColors(True);
obj.showSmoothLighting(True);


c1= HJavaView()
c1.draw(obj)
c1.visible()


One can draw several 3D objects which belong to jv.geom.PgElementSet jv.geom.PgElementSet class.

Showing functions in 3D

Here is an example which illustrates how to calculate parametric functions. Here is an example that illustrates how to create Kuen Surface


DMelt example: 3D Kuen Surface using interactve JavaView

The code is shown below uses the jvx.surface.PgParmSurface jvx.surface.PgParmSurface class:

# Describes parametrized surfaces over a two dimensional domain.
# Parameter domain allows adjustments.
# Konrad Polthier, Sergei Chekanov

from jv.function import PuFunction 
from jvx.surface import PgDomainDescr,PgParmSurface
from jhplot import HJavaView
from java.lang import Math

dimOfDomain = 2
numFunctions  = 3

m_domain = PgDomainDescr(dimOfDomain)
m_domain.setName("Domain of Kuen")
m_domain.setMaxSize(-10., -10., 10., 10.)
m_domain.setSize(-4.5, 0.05, 4.5, Math.PI-.05)
m_domain.setDiscr(16, 16)
m_domain.init()

m_function   = PuFunction(dimOfDomain, numFunctions)
m_parmSurface   = PgParmSurface(numFunctions)
m_parmSurface.setName("Kuen Surface")

m_function.setName("Functions of Kuen")
m_function.setExpression(0, "2./(1.+(u*sin(v))^2)*sqrt(1.+u*u)*sin(v)*cos(u-atan(u))")
m_function.setExpression(1, "2./(1.+(u*sin(v))^2)*sqrt(1.+u*u)*sin(v)*sin(u-atan(u))")
m_function.setExpression(2, "log(tan(v/2.))+2./(1.+(u*sin(v))^2)*cos(v)")
m_parmSurface.setFunctionExpr(m_function)

m_parmSurface.setDomainDescr(m_domain)
m_parmSurface.compute()

# add some colors
m_parmSurface.showElementColors(True);
m_parmSurface.showElementBackColor(True);
m_parmSurface.setTransparency(0.2);
m_parmSurface.showTransparency(True);
m_parmSurface.showSmoothElementColors(True);
m_parmSurface.showSmoothLighting(True);


c1=HJavaView()
c1.visible()
c1.draw(m_parmSurface)

DataMelt supports drawing all JavaView classes that inherent from the Java class jv.project.PgGeometry jv.project.PgGeometry. Below are several examples implemented using the Python language:


Drawing standard 2D functions

You can plot the standard jhplot.F2D jhplot.F2D functions using jhplot.HJavaView jhplot.HJavaView. You can use either the "draw(F2D)" method, or "add(F2D)" method. The latter returns jv.project.PgGeometry jv.project.PgGeometry object which can be used to modify style of the function (color, transparency). For example,

from jhplot import HJavaView,F2D
c1=HJavaView()
f1=F2D("x*y",-1,1,-1,1)
obj=c1.add(f1) # now you can add some style
c1.draw(obj)

Similarly, one can draw arrays of functions, or one can repeat "draw()" to overlay functions.