{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"J/Contour","description":"Accelerate E&P application development and protect your innovation by consuming our Data and Domain APIs / Platform APIs.","lang":"en-US","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":false}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"jcontour","__idx":0},"children":["J/Contour"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"release-notes","__idx":1},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Release Notes"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"34-release-notes","__idx":2},"children":["3.4 Release Notes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following updates apply to JContour-OGL and now requires at least OpenGL 3.2"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added support for stacked cgContourShape objects in cgShapeListLayer or cgStackedPlotView."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added option to disable/enable boundary smoothing when isoline smoothing is enabled using cgContourShape#setSmoothBoundary(boolean)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Color map now supports transparency"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updated label placement and filtering algorithm to improve accuracy and reduce memory footprint."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Isoline smoothing will automatically disable if the input file provided to cgContourShape#setGrid(cgContourGenericGrid) has over 50,000 triangles. cgContourShape#setSmoothIsolines(boolean) can be called after the contour is loaded to re-enable isoline smoothing but it is not recommended."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"33-release-notes","__idx":3},"children":["3.3 Release Notes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Small changes to allow JContour-OGL to use new labelling options."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"32-release-notes","__idx":4},"children":["3.2 Release Notes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added new tutorial, LabelingOptions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added collision detection/removal for line labels."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added option to orient labels in gradient direction. Previously they were\n   oriented up (which looks bad for isolines that meander around the vertical)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Adding line smoothing"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added ability of label letters to closely track the contour lines."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed enum cgContourLabelsDirection.DEFAULT to cgContourLabelsDirection.TOWARDS_TOP_OF_PLOT"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Details of the API changes can be found in JContour_32changes.txt."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"31-release-notes","__idx":5},"children":["3.1 Release Notes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the 3.1 release, J/Contour moved up to JDK 5, and all collections were"," ","generified. Many improvements were made to the printing, see the J/CarnacPro release notes. Additionally, the new"," ","print to scale feature was completed in this release. This necessitated a"," ","change in the requirements that"," ","applications must follow in order for printing to work properly."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We encourage customers with large data sets to use cells like the"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ContourDataSource"]}," tutorial (implements the interface"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgContourDataSource"]},"). Memory consumption is much lower when"," ","cells are used . For example, with a grid size of 900, when using cells the"," ","memory consumption is 95 MB, but without cells the memory consumption is 630"," ","MB."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Changes for 3.1 are the following:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The editors use the JGoodies Forms layout manager which is in\n    ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["forms.jar"]},". You will need to distribute this jar with your\n    application if you want to use our editor dialogs. "]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Removed these deprecated methods:\n    ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgContourFaultList.modelToGridTransform"]},",\n    ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ContourFillVisual.transparentHoles"]}," and\n    ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["holeColor"]},",\n    ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FaultInputProcessor.modelToGridTransform"]},",\n    ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgAbstractFillVisual.transparentHoles"]}," and\n    ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["holeColor"]},".",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed bug that caused contour lines to disappear"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed two errors in the Contour editor"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed bug causing illegal argument exception."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made gridding API easier to use by making the gridding classes smarter\n    about how they manage state during construction of the grid."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a bug that caused the isolines to hit the level label."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a bug where the level label formats were not being changed."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"31-changes","__idx":6},"children":["3.1 Changes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h1>API Comparison"," ","Comparing API changes in jcontour.jar from 3.0 to 3.1."," ","<h2>Classes Changed"]},{"$$mdtype":"Tag","name":"table","attributes":{},"children":[{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.datasource.cgContourDataSource",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed query  from: public abstract java.util.Iterator query(com.interactive.jcarnac2d.util.cgRect arg1, com.interactive.jcarnac2d.util.cgTransformation arg2) to: public abstract java.util.Iterator query(com.interactive.jcarnac2d.util.cgRect arg1, com.interactive.jcarnac2d.util.cgTransformation arg2) [Signature((Lcom/interactive/jcarnac2d/util/cgRect;Lcom/interactive/jcarnac2d/util/cgTransformation;)Ljava/util/Iterator","<","Ljava/lang/Integer;",">",";)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed loadGrid  from: public abstract com.interactive.jcontour2d.grid.cgContourAbstractGrid loadGrid(java.util.Iterator arg1) to: public abstract com.interactive.jcontour2d.grid.cgContourAbstractGrid loadGrid(java.util.Iterator arg1) [Signature((Ljava/util/Iterator","<","Ljava/lang/Integer;",">",";)Lcom/interactive/jcontour2d/grid/cgContourAbstractGrid;)]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.fault.cgContourFaultList",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Deleted",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void modelToGridTransform(com.interactive.jcarnac2d.util.cgTransformation tr) [Deprecated]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.gridder.AbstractGridder",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed getMinZValue  from: public double getMinZValue() to: public double getMinZValue()\n\t\tthrows java.lang.IllegalStateException"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed getMaxZValue  from: public double getMaxZValue() to: public double getMaxZValue()\n\t\tthrows java.lang.IllegalStateException"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.gridder.BSplineGridder",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double getMinZValue()\n\t\tthrows java.lang.IllegalStateException"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double getMaxZValue()\n\t\tthrows java.lang.IllegalStateException"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.gridder.JBSGridding.JBSGridding",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Deleted",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double[] JBSGridding(double[][] dd, com.interactive.jcontour2d.gridder.utilities.GriddingParameters parms, com.interactive.jcontour2d.gridder.utilities.MessageDisplayer m)\n\t\tthrows java.lang.InterruptedException"]}]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double[] constructGrid(double[][] dd, com.interactive.jcontour2d.gridder.utilities.GriddingParameters parms, com.interactive.jcontour2d.gridder.utilities.MessageDisplayer m)\n\t\tthrows java.lang.InterruptedException"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.gridder.JMCGridding.JMCGridding",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Deleted",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public float[] JMCGridding(double[][] dd, double[][] ff, com.interactive.jcontour2d.gridder.utilities.GriddingParameters parms, com.interactive.jcontour2d.gridder.utilities.MessageDisplayer M, com.interactive.jcontour2d.gridder.utilities.TempFileManager T)\n\t\tthrows java.lang.InterruptedException, java.lang.RuntimeException, java.lang.OutOfMemoryError"]}]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public float[] constructGrid(double[][] dd, double[][] ff, com.interactive.jcontour2d.gridder.utilities.GriddingParameters parms, com.interactive.jcontour2d.gridder.utilities.MessageDisplayer M, com.interactive.jcontour2d.gridder.utilities.TempFileManager T)\n\t\tthrows java.lang.InterruptedException, java.lang.RuntimeException, java.lang.OutOfMemoryError"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.gridder.MinCurvatureGridder",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double getMinZValue()\n\t\tthrows java.lang.IllegalStateException"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double getMaxZValue()\n\t\tthrows java.lang.IllegalStateException"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.gridder.utilities.XCordComparator",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public int compare(double[] o1, double[] o2)"]}]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed compare  from: public int compare(Object o1, Object o2) to: public volatile synthetic int compare(Object x0, Object x1)"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.ContourDataProcessor",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed getIsolines  from: public java.util.Iterator getIsolines() to: public java.util.Iterator getIsolines() [Signature(()Ljava/util/Iterator","<","Lcom/interactive/jcontour2d/shape/cgIsoline;",">",";)]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.ContourFillVisual",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Deleted",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void transparentHoles(boolean t) [Deprecated]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public boolean transparentHoles() [Deprecated]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public java.awt.Color holeColor() [Deprecated]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void holeColor(java.awt.Color col) [Deprecated]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.ContourLineVisual",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void setVisible(boolean visible)"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.CustomArrayList",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed add  from: public void add(int index, Object element) to: public void add(int index, Object element) [Signature((ITE;)V)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed set  from: public Object set(int index, Object element) to: public Object set(int index, Object element) [Signature((ITE;)TE;)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed ","<","init",">","  from: public void ","<","init",">","(java.util.Collection c) to: public void ","<","init",">","(java.util.Collection c) [Signature((Ljava/util/Collection","<","+TE;",">",";)V)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed remove  from: public Object remove(int index) to: public Object remove(int index) [Signature((I)TE;)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed get  from: public Object get(int index) to: public Object get(int index) [Signature((I)TE;)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed toArray  from: public Object[] toArray(Object[] a) to: public Object[] toArray(Object[] a) [Signature(","<","T:Ljava/lang/Object;",">","([TT;)[TT;)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed add  from: public boolean add(Object o) to: public boolean add(Object o) [Signature((TE;)Z)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed addAll  from: public boolean addAll(int index, java.util.Collection c) to: public boolean addAll(int index, java.util.Collection c) [Signature((ILjava/util/Collection","<","+TE;",">",";)Z)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed addAll  from: public boolean addAll(java.util.Collection c) to: public boolean addAll(java.util.Collection c) [Signature((Ljava/util/Collection","<","+TE;",">",";)Z)]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.FaultInputProcessor",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Deleted",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void modelToGridTransform(com.interactive.jcarnac2d.util.cgTransformation tr) [Deprecated]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.OneGridDataSource",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed query  from: public java.util.Iterator query(com.interactive.jcarnac2d.util.cgRect model_limits, com.interactive.jcarnac2d.util.cgTransformation m2d) to: public java.util.Iterator query(com.interactive.jcarnac2d.util.cgRect model_limits, com.interactive.jcarnac2d.util.cgTransformation m2d) [Signature((Lcom/interactive/jcarnac2d/util/cgRect;Lcom/interactive/jcarnac2d/util/cgTransformation;)Ljava/util/Iterator","<","Ljava/lang/Integer;",">",";)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed loadGrid  from: public com.interactive.jcontour2d.grid.cgContourAbstractGrid loadGrid(java.util.Iterator it) to: public com.interactive.jcontour2d.grid.cgContourAbstractGrid loadGrid(java.util.Iterator it) [Signature((Ljava/util/Iterator","<","Ljava/lang/Integer;",">",";)Lcom/interactive/jcontour2d/grid/cgContourAbstractGrid;)]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.OneGridIterator",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public Integer next()"]}]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed next  from: public Object next() to: public volatile synthetic Object next()"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.internal.StlCompatibleVector",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed push_back  from: public void push_back(Object o) to: public void push_back(Object o) [Signature((TE;)V)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed back  from: public Object back() to: public Object back() [Signature(()TE;)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed insert  from: public void insert(int p, Object o) to: public void insert(int p, Object o) [Signature((ITE;)V)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed sort  from: public void sort(int first, int last, java.util.Comparator c) to: public void sort(int first, int last, java.util.Comparator c) [Signature((IILjava/util/Comparator","<","-TE;",">",";)V)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed upperBound  from: public int upperBound(int from, int to, Object value, java.util.Comparator c) to: public int upperBound(int from, int to, Object value, java.util.Comparator c) [Signature((IITE;Ljava/util/Comparator","<","-TE;",">",";)I)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed front  from: public Object front() to: public Object front() [Signature(()TE;)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed find  from: public int find(int from, int to, Object o) to: public int find(int from, int to, Object o) [Signature((IITE;)I)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed push_front  from: public void push_front(Object o) to: public void push_front(Object o) [Signature((TE;)V)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed lowerBound  from: public int lowerBound(int from, int to, Object value, java.util.Comparator c) to: public int lowerBound(int from, int to, Object value, java.util.Comparator c) [Signature((IITE;Ljava/util/Comparator","<","-TE;",">",";)I)]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.processor.cgContourDataProcessor",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed getIsolines  from: public abstract java.util.Iterator getIsolines() to: public abstract java.util.Iterator getIsolines() [Signature(()Ljava/util/Iterator","<","Lcom/interactive/jcontour2d/shape/cgIsoline;",">",";)]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.shape.cgContourShape",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed getVisuals  from: public java.util.List getVisuals() to: public java.util.List getVisuals() [Signature(()Ljava/util/List","<","Lcom/interactive/jcontour2d/visual/cgAbstractVisual;",">",";)]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed getIsolines  from: public java.util.Iterator getIsolines() to: public java.util.Iterator getIsolines() [Signature(()Ljava/util/Iterator","<","Lcom/interactive/jcontour2d/shape/cgIsoline;",">",";)]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.visual.cgAbstractFillVisual",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Deleted",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public abstract void transparentHoles(boolean arg1) [Deprecated]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public abstract boolean transparentHoles() [Deprecated]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public abstract java.awt.Color holeColor() [Deprecated]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public abstract void holeColor(java.awt.Color arg1) [Deprecated]"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.visual.cgVisualsFactory",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Changed",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed getInstance  from: public static com.interactive.jcontour2d.visual.cgVisualsFactory getInstance() to: public static synchronized com.interactive.jcontour2d.visual.cgVisualsFactory getInstance()"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"300-release-notes","__idx":7},"children":["3.0.0 Release Notes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h1>API Changes in JContour"," ","API changes in jcontour.jar from 2.7.1 to 3.0.0."," ","<h2>Classes Added"]},{"$$mdtype":"Tag","name":"table","attributes":{},"children":[{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["com.interactive.jcontour2d.shape.cgIsoline"]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h2>Classes Changed"]},{"$$mdtype":"Tag","name":"table","attributes":{},"children":[{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.grid.cgContourAbstractGrid",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public abstract double getValueAtModelPoint(java.awt.geom.Point2D arg1)"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.grid.cgContourGrid",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nFields Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public static final double EPSILON = 1.0E-6"]}]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double getValueAtModelPoint(java.awt.geom.Point2D modelPoint)"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.grid.cgContourTriangularGrid",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public double getValueAtModelPoint(java.awt.geom.Point2D modelPoint)"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.scale.cgScaleRange",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public Object clone()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void ","<","init",">","(com.interactive.jcontour2d.scale.cgScaleRange that)"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.shape.cgContourShape",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void setSkipNearPoint(boolean val)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public com.interactive.jcontour2d.datasource.cgContourDataSource getDataSource()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public java.util.Iterator getIsolines()"]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\ncom.interactive.jcontour2d.visual.cgAbstractLineVisual",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"\nMethods Added",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public void setLineName(String name)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["public String getLineName()"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The API changes from 2.7.1 to 3.0.0"," ","are rather small."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We added support for iterating over the contour isolines. The method"," ","getIsolines was added to cgContourShape)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We improved the way that isoline labels are rendered."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A key addition was to add support so that any component in the view can"," ","print to a PDF file."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We added a method, getValueAtModelPoint, to cgContourAbstractGrid)"," ","that easily gets the altitude value at a model point."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can also enable an internal consistency checker by specifying the java"," ","property jcontour.internal.validation to \"true\". This can be helpful to"," ","explore the origins of a contouring failure."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The examples now conform to the Sun recommended practice of constructing"," ","the GUI on the event thread."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We added code to the tutorial ContourShape to"," ","cause the altitude values to be more regular (use fewer digits). That code"," ","can be found with the comment:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"/***************************************************************************\n *\n * Rationalize the range of heights/depths so that we get simpler numbers\n * in the display\n *\n **************************************************************************/\n","lang":"xml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h3>Bug Fixes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a problem with the color map when changing the number of contour\n    levels. If you shrink the number of contour levels to 1, and then\n    increase the number of levels to greater than one, the color map gets\n    messed up."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Resolved a problem where after setting contour levels 1 and then reset\n    it to another value it gives the wrong contour."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The colormap will now wrap or stretch."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["2.7.1 Release Notes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you migrate code from 2.6 to 2.7, you'll need to add code like shown"," ","below. We've added it at the end of the method that reads the contour data"," ","and creates the grid. For example, you can look at the readGridData method in"," ","the ContourEditor tutorial."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"cgRect gridSpace = new cgRect(0, 0, xSize - 1, ySize - 1);\n      cgTransformation gridToModel = new cgTransformation(gridSpace,\n              _modelSpace);\n      grid.setGridToModel(gridToModel);\n","lang":"xml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"name":"Demos"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h3>Demos"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added new gridder demo, demos/JContour/gridderdemo that demonstrates\n    the new gridding capabilities."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The demos use the new method ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FileFinder.findPath"]}," in the\n    util package to allow them to run with more flexibility in the current\n    working directory. Previously the demos would only run with a single\n    specific current working directory. Now they will run with the current\n    working directory set either to the toolkit installed root, or any\n    directory below that."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added a document that shows how to run the examples."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h3>Tutorials"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added a tutorial, ContourTriangular to demonstrate triangular\n  grids."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added a tutorial, ContourDataSource to demonstrate the datasource\n    package."]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h3>Functionality"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h4>Added Functionality"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added a new gridder package with the ability to construct grids from\n    point data (altitude values defined on random points)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added triangular grids."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added data cells in a new datasource package so that the entire grid\n    file does not need to be in memory at one time"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Some method names were rationalized to standard java form."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h4>Changed Functionality"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Created grid to model mapping for triangle grid data to fix the contour\n    labeling bug. "]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added APIs for setting skip near point flag in contour data processor\n    to overcome the discontinue of contour lines generated by large number of\n    small triangle grids. "]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["com.interactive.jcontour2d.grid.cgContourGrid \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["now derives from cgContourGenericGrid "]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["new methods setBorders, getBorders,getGridToModel, setGridToModel,\n        and getModelLimits"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["renamed buildNet to buildTriangleNet"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["renamed getBuildRange() to getRange()"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added new classes cgContourAbstractGrid, cgContourGenericGrid,\n    cgContourTriangularGrid, and HoleValueSet in the package\n    com.interactive.jcontour2d.grid"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added new package gridder, and new classes for gridding."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["com.interactive.jcontour2d.processor.cgContourDataProcessor \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["get and setGrid() changed to get and setDataSource()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["removed build()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["added n_areas() preBuild(), postBuild(), buildArea(),\n        isosourcesToIsolines(), and clearArea()"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["com.interactive.jcontour2d.shape.cgContourShape \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["changed grid_to_model(cgTransformation) to setGridToModel and\n        cgTransformation grid_to_model() to getGridToModel"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["added currentRenderingArea()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["get*Visual now return new abstract visual types"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["get and setGrid now manipulate a cgContourGenericGrid"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["added setDataSource"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["com.interactive.jcontour2d.visual.cgAbstractVisual \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["render arguments changed from (cgShapeRenderer,cgRect,cgGridRange)\n        to (cgShapeRenderer,cgRect)"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["com.interactive.jcontour2d.visual.cgVisualsFactory \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["added getBorderVisual()"]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["<h4>Deprecated Functionality"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["src.com.interactive.jcontour2d.fault.cgContourFaultList.java \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["modelToGridTransform( cgTransformation tr ) - not needed now "]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["src.com.interactive.jcontour2d.internal.FaultInputProcessor.java \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["modelToGridTransform( cgTransformation tr ) - not needed now "]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["src.com.interactive.jcontour2d.visual.cgAbstractFillVisual.java x4 \n    ",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["transparentHoles( boolean t ) - Now holes are always\n      transparent"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["transparentHoles() - Now holes are always transparent"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["holeColor( Color col ) - Now holes are always transparent"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["holeColor() - Now holes are always transparent"]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["2.6 Release Notes"]}]},"headings":[{"value":"J/Contour","id":"jcontour","depth":1},{"value":"Release Notes","id":"release-notes","depth":2},{"value":"3.4 Release Notes","id":"34-release-notes","depth":3},{"value":"3.3 Release Notes","id":"33-release-notes","depth":3},{"value":"3.2 Release Notes","id":"32-release-notes","depth":3},{"value":"3.1 Release Notes","id":"31-release-notes","depth":3},{"value":"3.1 Changes","id":"31-changes","depth":3},{"value":"3.0.0 Release Notes","id":"300-release-notes","depth":3}],"frontmatter":{"seo":{"title":"J/Contour"}},"lastModified":"2026-10-22T14:32:05.553Z","pagePropGetterError":{"message":"","name":""}},"slug":"/solutions/geotoolkit/geotoolkit_java/jgeotoolkit/jcontour/releasenote","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}