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; package org.meteoinfo.chart.graphic;
import org.joml.Vector3f; 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; import java.util.List;
@ -153,4 +158,49 @@ public class Model extends TriMeshGraphic {
protected void buildTriMeshGraphic() { 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 { public class TriMeshGraphic extends GraphicCollection3D {
private Logger logger = Logger.getLogger("TriMeshGraphic"); protected Logger logger = Logger.getLogger("TriMeshGraphic");
protected float[] vertexPosition; protected float[] vertexPosition;
protected float[] vertexValue; protected float[] vertexValue;
protected float[] vertexColor; protected float[] vertexColor;

View File

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