update Model class to normalize scale model data

This commit is contained in:
wyq 2023-04-06 14:42:36 +08:00
parent fe7ee7345c
commit c4002fa10c
3 changed files with 60 additions and 8 deletions

View File

@ -1,6 +1,11 @@
package org.meteoinfo.chart.graphic;
import org.joml.Vector3f;
import org.meteoinfo.chart.AspectType;
import org.meteoinfo.chart.jogl.Transform;
import org.meteoinfo.ndarray.Array;
import org.meteoinfo.ndarray.math.ArrayMath;
import org.meteoinfo.ndarray.math.ArrayUtil;
import java.util.List;
@ -153,4 +158,49 @@ public class Model extends TriMeshGraphic {
protected void buildTriMeshGraphic() {
}
/**
* Set triangles
* @param faceIndices The triangle face indices
* @param x X coordinate array
* @param y Y coordinate array
* @param z Z coordinate array
*/
public void setTriangles(Array faceIndices, Array x, Array y, Array z) {
logger.info("Start set triangles...");
x = x.copyIfView();
y = y.copyIfView();
z = z.copyIfView();
faceIndices = faceIndices.copyIfView();
this.vertexIndices = (int[]) faceIndices.getStorage();
float xMin = ArrayMath.min(x).floatValue();
float xMax = ArrayMath.max(x).floatValue();
float yMin = ArrayMath.min(y).floatValue();
float yMax = ArrayMath.max(y).floatValue();
float zMin = ArrayMath.min(z).floatValue();
float zMax = ArrayMath.max(z).floatValue();
float range = Math.max(xMax - xMin, yMax - yMin);
range = (zMax - zMin) > range ? (zMax - zMin) : range;
float min = -range / 2;
float max = range / 2;
Transform transform = new Transform();
transform.setExtent(min, max, min, max, min, max);
int n = x.getShape()[0];
this.vertexPosition = new float[n * 3];
int idx = 0;
for (int i = 0; i < n; i++) {
vertexPosition[idx] = transform.transform_x(x.getFloat(i));
vertexPosition[idx + 1] = transform.transform_y(y.getFloat(i));
vertexPosition[idx + 2] = transform.transform_z(z.getFloat(i));
idx += 3;
}
updateExtent();
logger.info("Set triangles finished!");
}
}

View File

@ -19,7 +19,7 @@ import java.util.logging.Logger;
public class TriMeshGraphic extends GraphicCollection3D {
private Logger logger = Logger.getLogger("TriMeshGraphic");
protected Logger logger = Logger.getLogger("TriMeshGraphic");
protected float[] vertexPosition;
protected float[] vertexValue;
protected float[] vertexColor;

View File

@ -1,32 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MeteoInfo File="milconfig.xml" Type="configurefile">
<Path OpenPath="D:\Working\MIScript\Jython\mis\io\netcdf">
<Path OpenPath="D:\Working\MIScript\Jython\mis\io\grib">
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\mesh"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\test"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\calc"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\web"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\burf"/>
<RecentFolder Folder="D:\Working\MIScript\cuace_dust\py\plot"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\model"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\plot"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\web"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\grib"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\netcdf"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\grib"/>
</Path>
<File>
<OpenedFiles>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\model\obj_airplane_line.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\model\obj_airplane_model.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\plot\air_path_model.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\netcdf\test_readnc_2.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\grib\test_read_ec_s2s.py"/>
</OpenedFiles>
<RecentFiles>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\model\obj_airplane_line.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\model\obj_airplane_model.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\plot\air_path_model.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\netcdf\test_readnc_2.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\grib\test_read_ec_s2s.py"/>
</RecentFiles>
</File>
<Font>
@ -34,5 +36,5 @@
</Font>
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
<Figure DoubleBuffering="true"/>
<Startup MainFormLocation="-7,-7" MainFormSize="1293,685"/>
<Startup MainFormLocation="-7,0" MainFormSize="1361,777"/>
</MeteoInfo>