3D Views - Planes and Relief Surfaces
Draw to a Flat Plane in 3D
In this first lesson we will simply draw to the default drawing plane on a new 3D view.
tmo_on_3d_plane.py
import geosoft.gxpy.gx as gx
import geosoft.gxpy.view as gxview
import geosoft.gxpy.group as gxgroup
import geosoft.gxpy.agg as gxagg
import geosoft.gxpy.grid as gxgrd
import geosoft.gxpy.viewer as gxviewer
gxc = gx.GXpy()
grid_file = 'Wittichica Creek Residual Total Field.grd'
# create a 3D view
with gxview.View_3d.new("TMI on a plane",
area_2d=gxgrd.Grid(grid_file).extent_2d(),
coordinate_system=gxgrd.Grid(grid_file).coordinate_system,
overwrite=True) as v:
v3d_name = v.file_name
# add the grid image to the view, with shading, ands contour
gxgroup.Aggregate_group.new(v, gxagg.Aggregate_image.new(grid_file, shade=True, contour=20))
gxgroup.contour(v, 'TMI_contour', grid_file)
# display the map in a Geosoft viewer
gxviewer.view_document(v3d_name, wait_for_close=False)
Draw on a 3D Relief Surface
In this lesson we use the data values to define a 3D relief surface for the drawing plane, which transforms from a flat plane to a function surface with function relief defined by the grid data values.
tmi_as_3d_relief.py
import geosoft.gxpy.gx as gx
import geosoft.gxpy.view as gxview
import geosoft.gxpy.group as gxgroup
import geosoft.gxpy.agg as gxagg
import geosoft.gxpy.grid as gxgrd
import geosoft.gxpy.viewer as gxviewer
gxc = gx.GXpy()
grid_file = 'Wittichica Creek Residual Total Field.grd'
# create a 3D view
with gxview.View_3d.new("TMI in relief",
area_2d=gxgrd.Grid.open(grid_file).extent_2d(),
coordinate_system=gxgrd.Grid.open(grid_file).coordinate_system,
overwrite=True) as v:
v3d_name = v.file_name
# use the data grid as the relief surface
v.set_plane_relief_surface(grid_file)
# add the grid image to the view, with shading, 20 nT contour interval to match default contour lines
gxgroup.Aggregate_group.new(v, gxagg.Aggregate_image.new(grid_file, shade=True, contour=20))
gxgroup.contour(v, 'TMI_contour', grid_file)
# display the map in a Geosoft viewer
gxviewer.view_document(v3d_name, wait_for_close=False)
Display Data on the Digital Elevation Model
tmi_on_3d_dem.py
# use the DEM as the relief surface
v.set_plane_relief_surface('Wittichica DEM.grd')
Stacked Planes
A common presentation shows different data layers appearing to float relative to each other. Here we create two floating planes shown relative to the DEM, which is shown as a relief surface at the expected Z elevation. The TMI data is shown as a relief surface floating above the DEM with relief determined by the TMI values, and a contour of the DEM data on a flat plane beneath the DEM surface.
tmi_3d_stack.py
tmi_file = 'Wittichica Creek Residual Total Field.grd'
dem_file = 'Wittichica DEM.grd'
# create a 3D view
with gxview.View_3d.new("TMI drapped on DEM",
area_2d=gxgrd.Grid.open(tmi_file).extent_2d(),
coordinate_system=gxgrd.Grid.open(tmi_file).coordinate_system,
scale=5000,
overwrite=True) as v:
v3d_name = v.file_name
# use the DEM as the relief surface
v.set_plane_relief_surface(dem_file)
gxgroup.Aggregate_group.new(v, gxagg.Aggregate_image.new(dem_file,
color_map='elevation.tbl'))
# relief plane for the TMI, offset to elevation 2000
v.new_drawing_plane('TMI relief')
v.set_plane_relief_surface(tmi_file, base=-4000)
gxgroup.Aggregate_group.new(v, gxagg.Aggregate_image.new(tmi_file))
gxgroup.contour(v, 'TMI_contour', tmi_file)
# add DEM contours on a plane floating beneath the DEM
v.new_drawing_plane('Scratch plane', offset=(0, 0, -2000))
gxgroup.contour(v, 'DEM contour', tmi_file)
# display the map in a Geosoft viewer
gxviewer.view_document(v3d_name, wait_for_close=False)
, multiple selections available,