Example #1
0
def test_texture():
    try:
        dirname, _ = os.path.split(os.path.abspath(__file__))
        png_file = os.path.sep.join(dirname.split(os.path.sep) + ['temp.png'])
        s = ['110010010011', '101011010100', '110010110101', '100010010011']
        s = [[int(v) for v in val] for val in s]
        f = open(png_file, 'wb')
        w = png.Writer(len(s[0]), len(s), greyscale=True, bitdepth=16)
        w.write(f, s)
        f.close()

        proj = omf.Project()

        surf = omf.SurfaceElement(
            geometry=omf.SurfaceGridGeometry(
                tensor_u=[1., 1., 1., 1., 1.],
                tensor_v=[1., 1., 1., 1., 1.],
            ),
            textures=[
                omf.ImageTexture(
                    origin=[0., 0, 0],
                    axis_u=[5., 0, 0],
                    axis_v=[0., 5, 0],
                    image=png_file,
                )
            ],
        )
        proj.elements = [surf]
        proj.validate()
        view = get_view_from_proj(proj)
        view.validate()
        assert len(view.contents) == 3

    finally:
        os.remove(png_file)
Example #2
0
def test_lines(subtype, options_class):
    proj = omf.Project(origin=[5., 5, 5])
    lines = omf.LineSetElement(
        name='my elem',
        description='my desc',
        geometry=omf.LineSetGeometry(
            vertices=[[i / 3, i / 4, i / 5] for i in range(10)],
            segments=[[i, i + 1] for i in range(9)],
            origin=[5., 5, 5],
        ),
        subtype=subtype,
        color='red',
    )
    proj.elements = [lines]
    proj.validate()
    view = get_view_from_proj(proj)
    view.validate()
    assert len(view.contents) == 3
    lineset = find(view, spatial.ElementLineSet)
    defaults = lineset.defaults.serialize()
    assert defaults['__class__'] == options_class
    assert defaults['color']['value'] == '#FF0000'
    assert list(lineset.vertices.array[0]) == [10., 10, 10]
    assert lineset.name == 'my elem'
    assert lineset.description == 'my desc'
Example #3
0
def test_volume_grid():
    proj = omf.Project(origin=[5., 5, 5])
    vol = omf.VolumeElement(
        name='my elem',
        description='my desc',
        geometry=omf.VolumeGridGeometry(
            tensor_u=[1., 1., 1., 1., 1.],
            tensor_v=[1., 1., 1., 1., 1.],
            tensor_w=[1., 1., 1., 1., 1.],
            origin=[5., 5, 5],
        ),
        color='red',
    )
    proj.elements = [vol]
    proj.validate()
    view = get_view_from_proj(proj)
    view.validate()
    assert len(view.contents) == 1
    vol = find(view, spatial.ElementVolumeGrid)
    defaults = vol.defaults.serialize()
    assert defaults['__class__'] == 'OptionsBlockModel'
    assert defaults['color']['value'] == '#FF0000'
    assert list(vol.origin) == [10., 10, 10]
    assert vol.name == 'my elem'
    assert vol.description == 'my desc'
Example #4
0
 def to_omf(self, filename=None):
     import omf
     project = omf.Project(
         name=self.title or '',
         description=self.description or '',
         elements=[res._to_omf() for res in self.resources],
     )
     if filename is not None:
         omf.OMFWriter(project, filename)
     return project
Example #5
0
def test_project():
    proj = omf.Project(
        name='my proj',
        description='my desc',
    )
    proj.validate()
    view = get_view_from_proj(proj)
    view.validate()
    assert view.name == 'my proj'
    assert view.description == 'my desc'
    assert view.contents == []
Example #6
0
def test_data():
    arr = [float(val) for val in range(25)]
    arr_int = [int(val % 4) for val in range(25)]

    proj = omf.Project()

    surf = omf.SurfaceElement(
        geometry=omf.SurfaceGridGeometry(
            tensor_u=[1., 1., 1., 1., 1.],
            tensor_v=[1., 1., 1., 1., 1.],
        ),
        data=[
            omf.ScalarData(name='my data',
                           description='my desc',
                           location='faces',
                           array=arr,
                           colormap=omf.ScalarColormap(
                               gradient=[
                                   'red',
                                   'blue',
                                   'black',
                                   'orange',
                               ] * 32,
                               limits=[min(arr), max(arr)],
                           )),
            omf.MappedData(
                name='my data',
                description='my desc',
                location='faces',
                array=arr_int,
                legends=[
                    omf.Legend(values=[
                        'yellow',
                        'black',
                        'brown',
                        'green',
                    ], ),
                    omf.Legend(values=[
                        'yellow!',
                        'black!!',
                        'brown!!!',
                        'green!!!!',
                    ], ),
                ],
            )
        ],
    )
    proj.elements = [surf]
    proj.validate()
    view = get_view_from_proj(proj)
    view.validate()
    assert len(view.contents) == 9
Example #7
0
def view_to_omf(view, filename='view.omf'):
    """Save a View as an OMF file

    All object types, data/texture types, and legends are supported. Only
    custom colormaps are unsupported due to limitations of OMF v1.

    Input:
    **view** - Valid View instance; see
    :class:`lfview.resources.manifests.manifests.View`
    **filename** - Path and filename for output OMF file (default: 'view.omf')`
    """

    omf_project = omf.Project(
        name=view.name or '',
        description=view.description or '',
        elements=[elem.to_omf() for elem in view.elements],
    )
    omf.OMFWriter(omf_project, filename)
Example #8
0
def test_surfaces():
    proj = omf.Project(origin=[5., 5, 5])
    surf_0 = omf.SurfaceElement(
        name='my elem',
        description='my desc',
        geometry=omf.SurfaceGeometry(
            vertices=[[i / 3, i / 4, i / 5] for i in range(10)],
            triangles=[[i, i + 1, i + 2] for i in range(8)],
            origin=[5., 5, 5],
        ),
        color='red',
    )
    surf_1 = omf.SurfaceElement(
        name='my elem',
        description='my desc',
        geometry=omf.SurfaceGridGeometry(
            tensor_u=[1., 1., 1., 1., 1.],
            tensor_v=[1., 1., 1., 1., 1.],
            offset_w=[1.] * 36,
            origin=[5., 5, 5],
        ),
        color='red',
    )
    proj.elements = [surf_0, surf_1]
    proj.validate()
    view = get_view_from_proj(proj)
    view.validate()
    assert len(view.contents) == 5
    for cls in (spatial.ElementSurface, spatial.ElementSurfaceGrid):
        surface = find(view, cls)
        defaults = surface.defaults.serialize()
        assert defaults['__class__'] == 'OptionsSurface'
        assert defaults['color']['value'] == '#FF0000'
        assert surface.name == 'my elem'
        assert surface.description == 'my desc'
    assert list(find(
        view, spatial.ElementSurface).vertices.array[0]) == [10., 10, 10]
    assert list(find(view, spatial.ElementSurfaceGrid).origin) == [10., 10, 10]
Example #9
0
def test_points():
    proj = omf.Project(origin=[5., 5, 5])
    pts = omf.PointSetElement(
        name='my elem',
        description='my desc',
        geometry=omf.PointSetGeometry(
            vertices=[[i / 3, i / 4, i / 5] for i in range(10)],
            origin=[5., 5, 5],
        ),
        color='red',
    )
    proj.elements = [pts]
    proj.validate()
    view = get_view_from_proj(proj)
    view.validate()
    assert len(view.contents) == 2
    pointset = find(view, spatial.ElementPointSet)
    defaults = pointset.defaults.serialize()
    assert defaults['__class__'] == 'OptionsPoints'
    assert defaults['color']['value'] == '#FF0000'
    assert list(pointset.vertices.array[0]) == [10., 10, 10]
    assert pointset.name == 'my elem'
    assert pointset.description == 'my desc'
Example #10
0
import unittest
import os
import shutil
import tempfile

import numpy as np
import omf
import omfvista
import pyvista

PROJECT = omf.Project(name='Test project',
                      description='Just some assorted elements')
POINTSET = omf.PointSetElement(
    name='Random Points',
    description='Just random points',
    geometry=omf.PointSetGeometry(vertices=np.random.rand(100, 3)),
    data=[
        omf.ScalarData(name='rand data',
                       array=np.random.rand(100),
                       location='vertices'),
        omf.ScalarData(name='More rand data',
                       array=np.random.rand(100),
                       location='vertices')
    ],
    #                           textures=[
    #                                   omf.ImageTexture(
    #                                           name='test image',
    #                                           image='test_image.png',
    #                                           origin=[0, 0, 0],
    #                                           axis_u=[1, 0, 0],
    #                                           axis_v=[0, 1, 0]
Example #11
0
land_surface.textures = [geo_aer, topo_map, geo_no_aer]
land_surface.validate()

###############################################################################
topo = omfvista.wrap(land_surface)

###############################################################################

topo.plot(show_edges=False, texture=True)

###############################################################################
# And now create an OMF project file for the surfaces

proj = omf.Project(
    name='FORGE Surfaces',
    description=
    'All surfaces for the 2019 FORGE Geothermal Student Competition ')

proj.elements = [
    land_surface,
    temp_225c,
    temp_175c,
    opal_mound_fault,
    negro_mag_fault,
    top_granitoid,
]

proj.validate()

###############################################################################
# Save the GIS project file
Example #12
0
# Load the shape files
shapes = gdc19.read_shape_file_to_omf(gdc19.get_shp_path('FORGE_Outline'),
                                      topo_points=topo.points)
shapes

###############################################################################

boundary = shapes[0]
boundary.name = 'boundary'
boundary.validate()

###############################################################################
omfvista.wrap(boundary).plot(show_edges=False)

###############################################################################
# Now save out the GIS data to an OMF project file

proj = omf.Project(
    name='FORGE GIS Data',
    description=
    'All GIS data for the 2019 FORGE Geothermal Student Competition ')

proj.elements = [boundary]

proj.validate()

###############################################################################
# Save the GIS project file

omf.OMFWriter(proj, gdc19.get_project_path('gis.omf'))
Example #13
0
                           (ncz, ncy, ncx), order='F').ravel(),
                       location='cells'),
    ],
)
temp_model.validate()

###############################################################################
# And one final sanity check

omfvtk.wrap(temp_model).clip_box(gdc19.get_roi_bounds(),
                                 invert=False).plot(cmap='coolwarm')

###############################################################################
# Write the data
# ++++++++++++++

proj = omf.Project(
    name='FORGE Temperature Data',
    description=
    'All temperature data/models for the 2019 FORGE Geothermal Student Competition '
)

proj.elements = [temperature, temp_model]

proj.validate()

###############################################################################
# Save the temperature project file

omf.OMFWriter(proj, gdc19.get_project_path('temperature.omf'))
Example #14
0
    def test_doc_ex(self):
        dirname, _ = os.path.split(os.path.abspath(__file__))
        pngfile = os.path.sep.join(dirname.split(os.path.sep)[:-1] +
                                   ['docs', 'images', 'PointSetGeometry.png'])

        proj = omf.Project(
            name='Test project',
            description='Just some assorted elements'
        )

        pts = omf.PointSetElement(
            name='Random Points',
            description='Just random points',
            geometry=omf.PointSetGeometry(
                vertices=np.random.rand(100, 3)
            ),
            data=[
                omf.ScalarData(
                    name='rand data',
                    array=np.random.rand(100),
                    location='vertices'
                ),
                omf.ScalarData(
                    name='More rand data',
                    array=np.random.rand(100),
                    location='vertices'
                )
            ],
            textures=[
                omf.ImageTexture(
                    name='test image',
                    image=pngfile,
                    origin=[0, 0, 0],
                    axis_u=[1, 0, 0],
                    axis_v=[0, 1, 0]
                ),
                omf.ImageTexture(
                    name='test image',
                    image=pngfile,
                    origin=[0, 0, 0],
                    axis_u=[1, 0, 0],
                    axis_v=[0, 0, 1]
                )
            ],
            color='green'
        )

        lin = omf.LineSetElement(
            name='Random Line',
            geometry=omf.LineSetGeometry(
                vertices=np.random.rand(100, 3),
                segments=np.floor(np.random.rand(50, 2)*100).astype(int)
            ),
            data=[
                omf.ScalarData(
                    name='rand vert data',
                    array=np.random.rand(100),
                    location='vertices'
                ),
                omf.ScalarData(
                    name='rand segment data',
                    array=np.random.rand(50),
                    location='segments'
                )
            ],
            color='#0000FF'
        )

        surf = omf.SurfaceElement(
            name='trisurf',
            geometry=omf.SurfaceGeometry(
                vertices=np.random.rand(100, 3),
                triangles=np.floor(np.random.rand(50, 3)*100).astype(int)
            ),
            data=[
                omf.ScalarData(
                    name='rand vert data',
                    array=np.random.rand(100),
                    location='vertices'
                ),
                omf.ScalarData(
                    name='rand face data',
                    array=np.random.rand(50),
                    location='faces'
                )
            ],
            color=[100, 200, 200]
        )

        grid = omf.SurfaceElement(
            name='gridsurf',
            geometry=omf.SurfaceGridGeometry(
                tensor_u=np.ones(10).astype(float),
                tensor_v=np.ones(15).astype(float),
                origin=[50., 50., 50.],
                axis_u=[1., 0, 0],
                axis_v=[0, 0, 1.],
                offset_w=np.random.rand(11, 16).flatten()
            ),
            data=[
                omf.ScalarData(
                    name='rand vert data',
                    array=np.random.rand(11, 16).flatten(),
                    location='vertices'
                ),
                omf.ScalarData(
                    name='rand face data',
                    array=np.random.rand(10, 15).flatten(order='f'),
                    location='faces'
                )
            ],
            textures=[
                omf.ImageTexture(
                    name='test image',
                    image=pngfile,
                    origin=[2., 2., 2.],
                    axis_u=[5., 0, 0],
                    axis_v=[0, 2., 5.]
                )
            ]
        )

        vol = omf.VolumeElement(
            name='vol',
            geometry=omf.VolumeGridGeometry(
                tensor_u=np.ones(10).astype(float),
                tensor_v=np.ones(15).astype(float),
                tensor_w=np.ones(20).astype(float),
                origin=[10., 10., -10]
            ),
            data=[
                omf.ScalarData(
                    name='Random Data',
                    location='cells',
                    array=np.random.rand(10, 15, 20).flatten()
                )
            ]
        )

        proj.elements = [pts, lin, surf, grid, vol]

        assert proj.validate()

        serial_file = os.path.sep.join([dirname, 'out.omf'])
        omf.OMFWriter(proj, serial_file)
        reader = omf.OMFReader(serial_file)
        new_proj = reader.get_project()

        assert new_proj.validate()
        assert str(new_proj.elements[3].textures[0].uid) == \
            str(proj.elements[3].textures[0].uid)
        del reader
        os.remove(serial_file)