.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/plot_meshdomain2.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_plot_meshdomain2.py: Mesh distance ============= .. GENERATED FROM PYTHON SOURCE LINES 7-9 In this example we will see how to use the mesh domain adapter to compute distance from a point to a Mesh We will also how it can be combined with LevelSetMesher to compute the intersection of meshes .. GENERATED FROM PYTHON SOURCE LINES 11-16 .. code-block:: Python import matplotlib import openturns as ot import openturns.viewer as otv import otmeshing as otm .. GENERATED FROM PYTHON SOURCE LINES 17-18 Create a mesh from an interval .. GENERATED FROM PYTHON SOURCE LINES 18-21 .. code-block:: Python dim = 2 mesh = ot.IntervalMesher([1] * dim).build(ot.Interval([-0.7] * dim, [0.7] * dim)) .. GENERATED FROM PYTHON SOURCE LINES 22-23 Create the domain adapter from the mesh .. GENERATED FROM PYTHON SOURCE LINES 23-25 .. code-block:: Python domain = otm.MeshDomain2(mesh) .. GENERATED FROM PYTHON SOURCE LINES 26-28 Sample points and compute distances from the mesh a negative distance means the point is inside the mesh .. GENERATED FROM PYTHON SOURCE LINES 28-33 .. code-block:: Python n = 200 points = ot.Normal(dim).getSample(n) distances = domain.computeDistance(points) print(f"min={distances.getMin()} max={distances.getMax()}") .. rst-class:: sphx-glr-script-out .. code-block:: none min=[-0.641941] max=[2.56369] .. GENERATED FROM PYTHON SOURCE LINES 34-35 Plot the points according to the distance to the mesh .. GENERATED FROM PYTHON SOURCE LINES 35-49 .. code-block:: Python dmax = distances.getMax()[0] cmap = matplotlib.colormaps["PiYG"] graph = mesh.draw() for i in range(n): di = distances[i, 0] if di < 0.0: rgba = cmap(-di) else: rgba = cmap(1.0 - 0.5 * (di) / dmax) cloud = ot.Cloud([points[i]]) color = ot.Drawable.ConvertFromRGBA(*rgba) cloud.setColor(color) graph.add(cloud) .. GENERATED FROM PYTHON SOURCE LINES 50-53 .. code-block:: Python graph.setTitle("Mesh domain") view = otv.View(graph) .. image-sg:: /auto_examples/images/sphx_glr_plot_meshdomain2_001.png :alt: Mesh domain :srcset: /auto_examples/images/sphx_glr_plot_meshdomain2_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 54-55 We will see that we can use the mesh distance to compute an intersection of meshes .. GENERATED FROM PYTHON SOURCE LINES 55-82 .. code-block:: Python def levelSetIntersectionMeshing(mesh1, mesh2, n=20): """Compute an intersection using mesh distance.""" dim = mesh1.getDimension() min1 = mesh1.getVertices().getMin() min2 = mesh2.getVertices().getMin() max1 = mesh1.getVertices().getMax() max2 = mesh2.getVertices().getMax() minB = list(map(min, min1, min2)) maxB = list(map(max, max1, max2)) bbox = ot.Interval(minB, maxB) domain1 = otm.MeshDomain2(mesh1) domain2 = otm.MeshDomain2(mesh2) def _exec(X): d1 = domain1.computeDistance(X) d2 = domain2.computeDistance(X) return [max(d1, d2)] f = ot.PythonFunction(dim, 1, _exec) levelSet = ot.LevelSet(f, ot.LessOrEqual(), 0.0) mesher = ot.LevelSetMesher([n] * dim) mesh = mesher.build(levelSet, bbox, False) return mesh .. GENERATED FROM PYTHON SOURCE LINES 83-84 Define two intersecting square meshes .. GENERATED FROM PYTHON SOURCE LINES 84-88 .. code-block:: Python dim = 2 mesh1 = ot.IntervalMesher([1] * dim).build(ot.Interval([0.0] * dim, [3.0] * dim)) mesh2 = ot.IntervalMesher([1] * dim).build(ot.Interval([1.0] * dim, [4.0] * dim)) .. GENERATED FROM PYTHON SOURCE LINES 89-90 Compute the intersection: it should be the interval [1,3]^2 .. GENERATED FROM PYTHON SOURCE LINES 90-94 .. code-block:: Python inter = levelSetIntersectionMeshing(mesh1, mesh2) graph = inter.draw() view = otv.View(graph) .. image-sg:: /auto_examples/images/sphx_glr_plot_meshdomain2_002.png :alt: Mesh Unnamed :srcset: /auto_examples/images/sphx_glr_plot_meshdomain2_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 95-96 .. code-block:: Python otv.View.ShowAll() .. _sphx_glr_download_auto_examples_plot_meshdomain2.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_meshdomain2.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_meshdomain2.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_meshdomain2.zip `