462 lines
1014 KiB
Plaintext
462 lines
1014 KiB
Plaintext
|
|
{
|
|||
|
|
"cells": [
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"# Gmsh模型文件可视化\n",
|
|||
|
|
"\n",
|
|||
|
|
"这个notebook演示如何使用meshio和pyvista读取并可视化Gmsh模型文件。"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 1. 安装必要的库\n",
|
|||
|
|
"\n",
|
|||
|
|
"首先,我们需要安装meshio和pyvista库:"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": null,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"# 安装必要的库\n",
|
|||
|
|
"import subprocess\n",
|
|||
|
|
"import sys\n",
|
|||
|
|
"\n",
|
|||
|
|
"def install_package(package):\n",
|
|||
|
|
" \"\"\"安装Python包\"\"\"\n",
|
|||
|
|
" try:\n",
|
|||
|
|
" subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", package])\n",
|
|||
|
|
" print(f\"✓ {package} 安装成功\")\n",
|
|||
|
|
" except subprocess.CalledProcessError:\n",
|
|||
|
|
" print(f\"✗ {package} 安装失败\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 安装meshio和pyvista\n",
|
|||
|
|
"#install_package(\"meshio\")\n",
|
|||
|
|
"#install_package(\"pyvista\")"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 2. 导入库\n",
|
|||
|
|
"\n",
|
|||
|
|
"导入我们将要使用的库:"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 1,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"✓ 所有库导入成功\n",
|
|||
|
|
"meshio版本: 5.3.5\n",
|
|||
|
|
"pyvista版本: 0.46.3\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"import meshio\n",
|
|||
|
|
"import pyvista as pv\n",
|
|||
|
|
"import numpy as np\n",
|
|||
|
|
"import os\n",
|
|||
|
|
"from pathlib import Path\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 设置pyvista的显示选项\n",
|
|||
|
|
"pv.set_plot_theme(\"document\") # 使用文档主题\n",
|
|||
|
|
"pv.set_jupyter_backend(\"static\") # 在Jupyter中使用静态后端\n",
|
|||
|
|
"\n",
|
|||
|
|
"print(\"✓ 所有库导入成功\")\n",
|
|||
|
|
"print(f\"meshio版本: {meshio.__version__}\")\n",
|
|||
|
|
"print(f\"pyvista版本: {pv.__version__}\")"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 3. 读取Gmsh文件\n",
|
|||
|
|
"\n",
|
|||
|
|
"使用meshio读取Gmsh文件:"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 21,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
"✓ 成功读取文件: t1.msh\n",
|
|||
|
|
" - 点数: 3929\n",
|
|||
|
|
" - 维度: 3\n",
|
|||
|
|
" - line单元数: 356\n",
|
|||
|
|
" - triangle单元数: 7474\n",
|
|||
|
|
"\n",
|
|||
|
|
"网格详细信息:\n",
|
|||
|
|
"点坐标范围:\n",
|
|||
|
|
" X: [0.000, 0.100]\n",
|
|||
|
|
" Y: [0.000, 0.300]\n",
|
|||
|
|
" Z: [0.000, 0.000]\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"def read_gmsh_file(filename):\n",
|
|||
|
|
" \"\"\"读取Gmsh文件并返回mesh对象\"\"\"\n",
|
|||
|
|
" try:\n",
|
|||
|
|
" mesh = meshio.read(filename)\n",
|
|||
|
|
" print(f\"✓ 成功读取文件: {filename}\")\n",
|
|||
|
|
" print(f\" - 点数: {mesh.points.shape[0]}\")\n",
|
|||
|
|
" print(f\" - 维度: {mesh.points.shape[1]}\")\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 显示单元类型和数量\n",
|
|||
|
|
" for cell_block in mesh.cells:\n",
|
|||
|
|
" cell_type = cell_block.type\n",
|
|||
|
|
" cells = cell_block.data\n",
|
|||
|
|
" print(f\" - {cell_type}单元数: {cells.shape[0]}\")\n",
|
|||
|
|
" \n",
|
|||
|
|
" return mesh\n",
|
|||
|
|
" except Exception as e:\n",
|
|||
|
|
" print(f\"✗ 读取文件失败: {e}\")\n",
|
|||
|
|
" return None\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 读取示例文件\n",
|
|||
|
|
"mesh = read_gmsh_file(\"t1.msh\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 显示网格信息\n",
|
|||
|
|
"if mesh:\n",
|
|||
|
|
" print(\"\\n网格详细信息:\")\n",
|
|||
|
|
" print(f\"点坐标范围:\")\n",
|
|||
|
|
" print(f\" X: [{mesh.points[:, 0].min():.3f}, {mesh.points[:, 0].max():.3f}]\")\n",
|
|||
|
|
" print(f\" Y: [{mesh.points[:, 1].min():.3f}, {mesh.points[:, 1].max():.3f}]\")\n",
|
|||
|
|
" print(f\" Z: [{mesh.points[:, 2].min():.3f}, {mesh.points[:, 2].max():.3f}]\")"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 5. 转换为PyVista格式\n",
|
|||
|
|
"\n",
|
|||
|
|
"将meshio网格转换为PyVista格式以便可视化:"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 22,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"✓ 网格转换成功\n",
|
|||
|
|
" - PyVista网格类型: PolyData\n",
|
|||
|
|
" - 点数: 3929\n",
|
|||
|
|
" - 单元数: 11403\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"def meshio_to_pyvista(mesh):\n",
|
|||
|
|
" \"\"\"将 meshio 网格转换为 PyVista 网格\"\"\"\n",
|
|||
|
|
" points = mesh.points\n",
|
|||
|
|
"\n",
|
|||
|
|
" # 1. 四面体\n",
|
|||
|
|
" tetra_block = None\n",
|
|||
|
|
" for block in mesh.cells:\n",
|
|||
|
|
" if block.type == \"tetra\":\n",
|
|||
|
|
" tetra_block = block\n",
|
|||
|
|
" break\n",
|
|||
|
|
" if tetra_block is not None:\n",
|
|||
|
|
" # PV 要求每行前缀节点数\n",
|
|||
|
|
" cells = np.hstack([np.full((tetra_block.data.shape[0], 1), 4), tetra_block.data]).ravel()\n",
|
|||
|
|
" cell_types = np.full(tetra_block.data.shape[0], pv.CellType.TETRA, dtype=np.uint8)\n",
|
|||
|
|
" return pv.UnstructuredGrid(cells, cell_types, points)\n",
|
|||
|
|
"\n",
|
|||
|
|
" # 2. 三角形\n",
|
|||
|
|
" tri_block = None\n",
|
|||
|
|
" for block in mesh.cells:\n",
|
|||
|
|
" if block.type == \"triangle\":\n",
|
|||
|
|
" tri_block = block\n",
|
|||
|
|
" break\n",
|
|||
|
|
" if tri_block is not None:\n",
|
|||
|
|
" pdata = pv.PolyData(points)\n",
|
|||
|
|
" pdata.faces = np.hstack([np.full((tri_block.data.shape[0], 1), 3), tri_block.data]).ravel()\n",
|
|||
|
|
" return pdata\n",
|
|||
|
|
"\n",
|
|||
|
|
" # 3. 都不支持就退化成点云\n",
|
|||
|
|
" return pv.PolyData(points)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 转换网格\n",
|
|||
|
|
"if mesh:\n",
|
|||
|
|
" pv_mesh = meshio_to_pyvista(mesh)\n",
|
|||
|
|
" print(f\"✓ 网格转换成功\")\n",
|
|||
|
|
" print(f\" - PyVista网格类型: {type(pv_mesh).__name__}\")\n",
|
|||
|
|
" print(f\" - 点数: {pv_mesh.n_points}\")\n",
|
|||
|
|
" print(f\" - 单元数: {pv_mesh.n_cells}\")"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 6. 可视化网格\n",
|
|||
|
|
"\n",
|
|||
|
|
"使用PyVista可视化网格:"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 23,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAMABAADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKhu2nSyne2QPcLGxiRujNjgH8aqaDPqdzoNjPrNtHbak8Qa5hj+6j9wOTx+JoANc1uw8O6TNqepTeVbRYyQpZmJOAqgckkkACsfRfHmnaxq6aVLYappV/LGZYINTtTCZ1HUpyQcdx19utbep6PYawtqt/biZbW4S6hBYgLKnKtwRnHoeK841HWL/AFD4p+GU1/SZNCsrSWf7HPK4l+2TuuxUDp8qZHOCcnpQB2fiDxnpnh69gsHivL7Up0Mkdjp8BmmKD+IgcBc9yR/Ol8PeMtL8R3NxZQpd2eo24DTWN9AYZ0U9G2nqOeoJ/WsDw1LDa/FrxhbXzKmo3S20tpv4MtsI8fJnsGBzjvTdfmguvjN4Tg09ke/tLe6e/wBhyY7dkAQPj1cjA9896ANK++I+l22p3VjY6brOsSWb+XdSaZZmZIH7qzZHI9BmtrTPE2j6voB1u0vYzp6qzSSv8nlbfvBweVI75qt4f0XT/A3hUWZu/wDRrbzJ57u4IUsWYszuenfr6AV5VfwXeo/Dfxpr9vazRaTqupx3kUAUq8lqjoJJcdt4UsfYH1oA7r/ha2i+WLttN11NJJ41VtOcWuM43buu33xXbQTxXNvHcQSLLDKodHQ5VlIyCD3BFZs2q6GPC76lJc2h0Q224yZHlGLGMemMcY/CsD4SRXMPww0ZblHTKSPEr/eETSMY8/8AASv4YoA7WiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAhu7lbOynunBKQxtIwXqQBnj8qqaDrEHiHQbLV7aOSOC8iEqJKAGAPrgkZrRrlIPHdvJ4ut/Dk+iazZ3Fy8y29xcwIsMwiGWZW3kkYxjjuOlADfGWq6zoF7pGr2kc9zosMkiarbW8Qkk2Mo2SAY3YQgkgdjXM+I/EWnfEYaXoXhjzr4/b4bm5vBA8cdpHG24ksyj5z0A9z0r0u+ujZWFxdC3nuTDGziG3UNJJgZ2qCRkntzWJ4Y8ZW3ii81Kzj0zU9PutOMYnh1CJY2HmKWXAVm7DPOOooAqfEKy8LHw7NqnifT47qKyXdFglZS54CIykMCxwMA/yrP+GPguLwloc+oXVrHbanqTfaLiNSSLdOqxAnJO0HknJJzyeK76ua0Px1o/iHxNq2had58k+mY86YqvlMc4IU5ycHIPA6d6APMbj4g+F/HWuMdf1uKx8MWUuYNOcPvv3HSSXA4jHZO/U16zoHiXQPFFpMdEvYby3gxHII0IVcjgYIHase++JGmQajdWWn6XrWtPaN5dzJpdn5yQv3UtkAsPQZrc0HxLpXiTSTqWm3Ie3VmSXeCjRMv3lcHlSPegDy7VPAPhbxF8QY9D0fR4oLTT3W61meJ3Cbjyluq52qW6tgDA4z2r2VEWNFRFCoowqqMAD0FcTH8VNBkkjka11aLS5ZRFHq8lmy2jMTgfP1AJ4yQBXcUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWRo9zrU9/q6apZwwW0NzssHj6yw7R8zfMec5HQfStesjR/ENtrV/q9nBFMj6Zc/ZpTIBhm2hsrg9Oe+KANeuF8Uf8lZ8A/7mpf8AolK7quF8Uf8AJWfAP+5qX/olKAO6rhfCn/JU/iD/AL+n/wDpPXdVwvhT/kqfxB/39P8A/SegC1481y8t4LTw7oj413WWMMDD/l3jH+snPoFHT3x1xXO+GdHtfC3xC1nTNNXZDZ6BbhCerNuclj6knJPuauSeFvG9r431bxDp954eme8CwwG/imZ4IF6RrtIAyeT1yay9Ah8VSfGPVI9Wl0Vi2lxLefZY5QDES4Xy9zHDbuucjHSgDpPhHCkPwu0MqPmliaWRu7OzsSSe5qpoVlbzfEr4gabImbO6gs2liBKgl4nVzx0JA5I5rL8IeMdM8BeH4vC3ix5tNvdNZ4o5JLeRo7qPcSrxsoIPBAx1zTbCPxJq9p408W6DDNYXmpNbjSo7mIB5YoBySrDA8zLAZ9QfegBfidNe6b4RbwzZeHpIPDvlQ28uqhvNS1gBGT5Qy52gdT9c16fZSwTWFvLayia3eJWikVtwdSODnvkV5/qHxR0TUdBubG2s7+bXbiBoRozWcgmEjLja+V2hQTyc4x+VdV4M0efw/wCDNI0m6cNcWtqkcpByA2OQD6A8fhQBu0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
|
|||
|
|
"image/png": "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vLz8vvvuwzwYMPjntddeu+GGGwgNIgEAC6H/6QMe+fxr2p6iECBbGmqLgAiIgAiIgAiIgAiIwD9BgCzed999F73+4IMP/uQnP5kyZQq6n129yA9G4lPic8BrsclAdXU1yQBJSUl2HbKzs6kUxOlxcXF//OMf7b41P1IU6Gtf+5rdV59zTbueMgDsgOijCIiACIiACIiACIiACPwTBJYsWUIawOOPP07U/r59+6j9T1zQXXfdtXDhwgGvgoOfnrNnz8ZC6N+B2qCof46n9f3178CR/hsGf/417S6ifQDsgOijCIiACIiACIiACIiACFzIBJQDcCHPrsYmAiIgAiIgAiIgAiIgAnYEZADYAdFHERABERABERABERABEbiQCcgAuJBnV2MTAREQAREQAREQAREQATsCMgDsgOijCIiACIiACIiACIiACFzIBGQAXMizq7GJgAiIgAiIgAiIgAj8ywTYCMzZ5m/EiBGfdal/vKfdFSjeHxISwk0efvhhu6/KysqoIpqSksKGAMHBwZMmTfrFL35RV1dn142Pvb291CBix7HAwEDKkt56662FhYX9u1lHVAbUQqGGCIiACIiACIiACIiACHxKAOW9cuVK8/Pn7wj2j/f89Op9LSqBsuWw3UE+bt68+cYbb8Q8iIyMnDFjRk1NDZVGDx8+/OSTT3700UeTJ0+2PYWqo++//z6GBEYC2xK/9NJLlBndsmXLxIkTbbtZbRkAFgo1REAEREAEREAEREAEROBTAmzii7A2P7u7u3/6Rb/WP97T9lSMinfeecfb27u1tdX2OPuILV26lN0A/vSnP2EhuLq68i192GjskUceWb58+YkTJzAMzFPefPNNHvKiiy5666232JOYgy+88MJtt912++23YzC4uAwQ7zPAIdvbqy0CIiACIiACIiACIiACIvCFE6ivr7/33ntR/z/4wQ/sLv7Tn/60u7v76aefZndhU/3TgZ5sDPzjH/+YnYYfe+wx6xS2AKP9l7/8xVT/tL/+9a9jDxw7dozAJKubbUMGgC0NtUVABERABERABERABETg30EA3V9SUoLWHzp0qO392An4vffeYzthXPi2x832d7/7XS8vr+eee876ipif4cOHJyYmWkdojBs3jvdTp07ZHrTaMgAsFGqIgAiIgAiIgAiIgAiIwL+DwPbt23HwI9O/973v2d0vIyOD4J9p06YNGL0TGho6cuRIRH9TU5N54v79+/sL/ezsbL4dNmyY3cXNjzIABsSigyIgAiIgAiIgAiIgAhcggV/96leU3Hn11Ve/wrG1tbV94xvfQN8/++yzbm72GbkNDQ08G0L/s57Q/MoyAPp3W7NmDUnAMTExrAz0/5Yj9rccsJMOioAIiIAIiIAIiIAIiIAIfCEE/t//+3+ZmZnf+c537Ir5mBcn+p+Gn5/fZ93Lw8ODr8xutn2oDrR+/fq0tLStW7dSlejll1/G1LHtYLVlAFgo1BABERABERABERABERCBL5cAubm///3vhwwZQlH/z7nTZ2l3Tvmsr/bs2UMqsHnN+Ph4q0xQ/7soBKg/Ex0RAREQAREQAREQARG4MAncfffd6enpl1566VcyPNz2d9xxR1dXF+X8cdJ/sc/ws5/9rKKi4uDBg9/61rcYI8sLu3fvHvAWWgEYEIsOioAIiIAIiIA
|
|||
|
|
"text/plain": [
|
|||
|
|
"<PIL.Image.Image image mode=RGB size=1024x768>"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"def visualize_mesh(pv_mesh, title=\"Gmsh网格可视化\"):\n",
|
|||
|
|
" \"\"\"可视化PyVista网格\"\"\"\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 创建绘图器\n",
|
|||
|
|
" plotter = pv.Plotter(notebook=True)\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 添加网格到绘图器\n",
|
|||
|
|
" if pv_mesh.n_cells > 0:\n",
|
|||
|
|
" # 如果有单元,显示网格\n",
|
|||
|
|
" plotter.add_mesh(pv_mesh, show_edges=True, color=\"lightblue\", \n",
|
|||
|
|
" opacity=0.8, label=\"网格\")\n",
|
|||
|
|
" else:\n",
|
|||
|
|
" # 如果只有点,显示点云\n",
|
|||
|
|
" plotter.add_points(pv_mesh.points, color=\"red\", point_size=10, \n",
|
|||
|
|
" label=\"点云\")\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 添加坐标轴\n",
|
|||
|
|
" plotter.add_axes()\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 添加标题\n",
|
|||
|
|
" plotter.add_title(title)\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 显示网格信息\n",
|
|||
|
|
" plotter.add_text(f\"点数: {pv_mesh.n_points}\\n单元数: {pv_mesh.n_cells}\", \n",
|
|||
|
|
" position=\"upper_right\", font_size=10)\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 显示图形\n",
|
|||
|
|
" return plotter.show()\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 可视化网格\n",
|
|||
|
|
"if mesh:\n",
|
|||
|
|
" visualize_mesh(pv_mesh, \"示例立方体网格\")"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 7. 高级可视化选项\n",
|
|||
|
|
"\n",
|
|||
|
|
"展示一些高级可视化功能:"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 24,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAMABAADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0PwX4L8K3XgXw9cXHhrRpp5dMtnkkksImZ2MSkkkrkknnNbn/AAgng/8A6FTQ/wDwXQ//ABNHgT/knnhr/sFWv/opa6CgDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4mj/hBPB//AEKmh/8Aguh/+JroKKAOf/4QTwf/ANCpof8A4Lof/iaP+EE8H/8AQqaH/wCC6H/4mugooA5//hBPB/8A0Kmh/wDguh/+Jo/4QTwf/wBCpof/AILof/ia6CigDn/+EE8H/wDQqaH/AOC6H/4msPxp4L8K2vgXxDcW/hrRoZ4tMuXjkjsIlZGETEEELkEHnNd5XP8Ajv8A5J54l/7BV1/6KagDD8F+C/Ct14F8PXFx4a0aaeXTLZ5JJLCJmdjEpJJK5JJ5zW5/wgng/wD6FTQ//BdD/wDE0eBP+SeeGv8AsFWv/opa6CgDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof8A4Lof/ia6CigDn/8AhBPB/wD0Kmh/+C6H/wCJo/4QTwf/ANCpof
|
|||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAIAAAA12IJaAAEAAElEQVR4Aey9BYAkV50/Xu1u09Pj7rIz675Z383GBUICCRIshMMOtzs4uONwd0KwJIQQJ7ruPu7uPd3T7t79/7yu2d4hcL8/xEN/H03Nq1evXr33eZuqr385jgohQAgQAoQAIUAIEAKEACFACGQNAgKsNJVKZc16aaGEACFACBACDAGBgN7/9C+BECAECIFsRADvf2E2rpvWTAgQAoQAIUAIEAKEACFACGQrAsQAZOvO07oJAUKAECAECAFCgBAgBLISAWIAsnLbadGEACFACBAChAAhQAgQAtmKADEA2brztG5CgBAgBAgBQoAQIAQIgaxEgBiArNx2WjQhQAgQAoQAIUAIEAKEQLYiQAxAtu48rZsQIAQIAUKAECAECAFCICsRIAYgK7edFk0IEAKEACFACBAChAAhkK0IEAOQrTtP6yYECAFCgBAgBAgBQoAQyEoEiAHIym2nRRMChAAhQAgQAoQAIUAIZCsCxABk687TugkBQoAQIAQIAUKAECAEshIBYgCycttp0YQAIUAIEAKEACFACBAC2YoAMQDZuvO0bkKAECAECAFCgBAgBAiBrESAGICs3HZaNCFACBAChAAhQAgQAoRAtiJADEC27jytmxAgBAgBQoAQIAQIAUIgKxEgBiArt50WTQgQAoQAIUAIEAKEACGQrQgQA5CtO0/rJgQIAUKAECAECAFCgBDISgSIAcjKbadFEwKEACFACBAChAAhQAhkKwLEAGTrztO6CQFCgBAgBAgBQoAQIASyEgFiALJy22nRhAAhQAgQAoQAIUAIEALZigAxANm687RuQoAQIAQIAUKAECAECIGsRIAYgKzcdlo0IUAIEAKEACFACBAChEC2IkAMQLbuPK2bECAECAFCgBAgBAgBQiArESAGICu3nRZNCBAChAAhQAgQAoQAIZCtCBADkK07T+smBAgBQoAQIAQIAUKAEMhKBIgByMptp0UTAoQAIUAIEAKEACFACGQrAsQAZOvO07oJAUKAECAECAFCgBAgBLISAWIAsnLbadGEACFACBAChAAhQAgQAtmKADEA2brztG5CgBAgBAgBQoAQIAQIgaxEgBiArNx2WjQhQAgQAoQAIUAIEAKEQLYiQAxAtu48rZsQIAQIAUKAECAECAFCICsRIAYgK7edFk0IEAKEACFACBAChAAhkK0IEAOQrTtP6yYECAFCgBAgBAgBQoAQyEoEiAHIym2nRRMChAAhQAgQAoQAIUAIZCsCxABk687TugkBQoAQIAQIAUKAECAEshIBYgCycttp0YQAIUAIEAKEACFACBAC2YoAMQDZuvO0bkKAECAECAFCgBAgBAiBrESAGICs3HZaNCFACBAChAAhQAgQAoRAtiJADEC27jytmxAgBAgBQoAQIAQIAUIgKxEgBiArt50WTQgQAoQAIUAIEAKEACGQrQgQA5CtO0/rJgQIAUKAECAECAFCgBDISgSIAcjKbadFEwKEACFACBAChAAhQAhkKwLEAGTrztO6CQFCgBAgBAgBQoAQIASyEgFiALJy22nRhAAhQAgQAoQAIUAIEALZigAxANm687RuQoAQIAQIAUKAECAECIGsRIAYgKzcdlo0IUAIEAKEACFACBAChEC2IkAMQLbuPK2bECAECAFCgBAgBAgBQiArESAGICu3nRZNCBAChAAhQAgQAoQAIZCtCBADkK07T+smBAgBQoAQIAQIAUKAEMhKBIgByMptp0UTAoQAIUAIEAKEACFACGQrAsQAZOvO07oJAUKAECAECAFCgBAgBLISAWIAsnLbadGEACFACBAChAAhQAgQAtmKADEA2brztG5CgBAgBAgBQoAQIAQIgaxEgBiArNx2WjQhQAgQAoQAIUAIEAKEQLYiQAxAtu48rZsQIAQIAUKAECAECAFCICsRIAYgK7edFk0IEAKEACFACBAChAAhkK0IEAOQrTtP6yYECAFCgBAgBAgBQoAQyEoEiAHIym2nRRMChAAhQAgQAoQAIUAIZCsCxABk687TugkBQoAQIAQIAUKAECAEshIBYgCycttp0YQAIUAIEAKEACFACBAC2YoAMQDZuvO0bkKAECAECAFCgBAgBAiBrESAGICs3HZaNCFACBAChAAhQAgQAoRAtiJADEC27jytmxAgBAgBQoAQIAQIAUIgKxEgBiArt50WTQgQAoQAIUAIEAKEACGQrQgQA5CtO0/rJgQIAUKAECAECAFCgBDISgSIAcjKbadFEwKEACFACBAChAAhQAhkKwLEAGTrztO6CQFCgBAgBAgBQoAQIASyEgFiALJy22nRhAAhQAgQAoQAIUAIEALZigAxANm687RuQoAQIAQIAUKAECAECIGsRIAYgKzcdlo0IUAIEAKEACFACBAChEC2IkAMQLbuPK2bECAECAFCgBAgBAgBQiArESAGICu3nRZNCBAChAAhQAgQAoQAIZCtCBADkK07T+smBAgBQoAQIAQIAUKAEMhKBIgByMptp0UTAoQAIUAIEAKEACFACGQrAsQAZOvO07oJAUKAECAECAFCgBAgBLISAWIAsnLbadGEACFACBAChAAhQAgQAtmKADEA2brztG5CgBAgBAgBQoAQIAQIgaxEgBiArNx2WjQhQAgQAoQAIUAIEAKEQLYiQAxAtu48rZsQIAQIAUKAECAECAFCICsRIAYgK7edFk0IEAKEACFACBAChAAhkK0IEAOQrTtP6yYECAFCgBAgBAgBQoAQyEoEiAHIym2nRRMChAAhQAgQAoQAIUAIZCsCxABk687TugkBQoAQIAQIAUKAECAEshIBYgCycttp0YQAIUAIEAKEACFACBAC2YoAMQDZuvO0bkKAECAECAFCgBAgBAiBrESAGICs3HZaNCFACBAChAAhQAgQAoRAtiJADEC27jytmxAgBAgBQoAQIAQIAUIgKxEgBiArt50WTQgQAoQAIUAIEAKEACGQrQgQA5CtO0/rJgQIAUKAECAECAFCgBDISgSIAcjKbadFEwKEACFACBAChAAhQAhkKwLEAGTrztO6CQFCgBAgBAgBQoAQIASyEgFiALJy22nRhAAhQAgQAoQAIUAIEALZigAxANm687RuQoAQIAQIAUKAECAECIGsRIAYgKzcdlo0IUAIEAKEACFACBAChEC2IkAMQLbuPK2bECAECAFCgBAgBAgBQiArESAGICu3nRZNCBAChAAhQAgQAoQAIZCtCBADkK07T+smBAgBQoAQIAQIAUKAEMhKBIgByMptp0UTAoQAIUAIEAKEACFACGQrAsQAZOvO07oJAUKAECAECAFCgBAgBLISAWIAsnLbadGEACFACBAChAAhQAgQAtmKADEA2brztG5CgBAgBAgBQoAQIAQIgaxEgBiArNx2WjQhQAgQAoQAIUAIEAKEQLYiQAxAtu48rZsQIAQIAUKAECAECAFCICsRIAYgK7edFk0IEAKEACFACBAChAAhkK0IEAOQrTtP6yYECAFCgBAgBAgBQoAQyEoEiAHIym2nRRMChAAhQAgQAoQAIUAIZCsCxABk687TugkBQoAQIAQIAUKAECAEshIBYgCycttp0YQAIUAIEAKEACFACBAC2YqAOFsXTuv+5xA4PGVfesPO8tylp1QnBAgBQoAQ+JdEYGZq9j21n8os7bqvbv/wZ+7KnFKFECAE3qAIkAbgDbpxNG1CgBAgBAgBQoAQIAQIAULgxSBADMCLQY3uIQQIAUKAECAEsgcBR8oSTgWyZ720UkLgXx4BMgH6l9/if3qBf9fa59E/3FtYVu73emKR6NVvvg2D/t1u//TD6AZCgBAgBAiB1wcCM9OWxx8+kZlLy/LK7bvWDA4P+PIs6649/6fnKkxBdYLbjA4HR9o6FiYzPd/SuLk8pyBzShVCgBB4/SNADMDrf49e4xm+5R3v2Pymt2259obJoaH8spyCsrLerrYff+Y3H/rGj1/jmdHjCQFCgBAgBF4+BMZGZp+6rzczXiIZ+NwXNn3iJ5VfOSiwOErW3yEVCPVf/szhCBc
|
|||
|
|
"text/plain": [
|
|||
|
|
"<PIL.Image.Image image mode=RGB size=1024x768>"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"def advanced_visualization(pv_mesh):\n",
|
|||
|
|
" \"\"\"高级可视化选项\"\"\"\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 创建子图\n",
|
|||
|
|
" plotter = pv.Plotter(shape=(2, 2), notebook=True)\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 子图1: 基础网格\n",
|
|||
|
|
" plotter.subplot(0, 0)\n",
|
|||
|
|
" plotter.add_mesh(pv_mesh, show_edges=True, color=\"lightblue\", opacity=0.8)\n",
|
|||
|
|
" plotter.add_title(\"基础网格\")\n",
|
|||
|
|
" plotter.add_axes()\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 子图2: 带颜色的网格\n",
|
|||
|
|
" plotter.subplot(0, 1)\n",
|
|||
|
|
" # 为每个单元添加随机颜色\n",
|
|||
|
|
" if pv_mesh.n_cells > 0:\n",
|
|||
|
|
" pv_mesh.cell_data[\"colors\"] = np.random.rand(pv_mesh.n_cells)\n",
|
|||
|
|
" plotter.add_mesh(pv_mesh, scalars=\"colors\", show_edges=True, cmap=\"viridis\")\n",
|
|||
|
|
" plotter.add_title(\"彩色网格\")\n",
|
|||
|
|
" plotter.add_axes()\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 子图3: 线框模式\n",
|
|||
|
|
" plotter.subplot(1, 0)\n",
|
|||
|
|
" plotter.add_mesh(pv_mesh, style=\"wireframe\", color=\"black\", line_width=2)\n",
|
|||
|
|
" plotter.add_title(\"线框模式\")\n",
|
|||
|
|
" plotter.add_axes()\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 子图4: 点模式\n",
|
|||
|
|
" plotter.subplot(1, 1)\n",
|
|||
|
|
" plotter.add_points(pv_mesh.points, color=\"red\", point_size=10)\n",
|
|||
|
|
" plotter.add_title(\"点云模式\")\n",
|
|||
|
|
" plotter.add_axes()\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 链接所有子图的相机\n",
|
|||
|
|
" plotter.link_views()\n",
|
|||
|
|
" \n",
|
|||
|
|
" return plotter.show()\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 高级可视化\n",
|
|||
|
|
"if mesh:\n",
|
|||
|
|
" advanced_visualization(pv_mesh)"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 8. 读取现有的Gmsh文件\n",
|
|||
|
|
"\n",
|
|||
|
|
"如果您有现有的Gmsh文件,可以使用以下代码读取和可视化:"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 25,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"正在处理文件: t1.msh\n",
|
|||
|
|
"\n",
|
|||
|
|
"✓ 成功读取文件: t1.msh\n",
|
|||
|
|
" - 点数: 3929\n",
|
|||
|
|
" - 维度: 3\n",
|
|||
|
|
" - line单元数: 356\n",
|
|||
|
|
" - triangle单元数: 7474\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAMABAADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKhu2nSyne2QPcLGxiRujNjgH8aqaDPqdzoNjPrNtHbak8Qa5hj+6j9wOTx+JoANc1uw8O6TNqepTeVbRYyQpZmJOAqgckkkACsfRfHmnaxq6aVLYappV/LGZYINTtTCZ1HUpyQcdx19utbep6PYawtqt/biZbW4S6hBYgLKnKtwRnHoeK841HWL/AFD4p+GU1/SZNCsrSWf7HPK4l+2TuuxUDp8qZHOCcnpQB2fiDxnpnh69gsHivL7Up0Mkdjp8BmmKD+IgcBc9yR/Ol8PeMtL8R3NxZQpd2eo24DTWN9AYZ0U9G2nqOeoJ/WsDw1LDa/FrxhbXzKmo3S20tpv4MtsI8fJnsGBzjvTdfmguvjN4Tg09ke/tLe6e/wBhyY7dkAQPj1cjA9896ANK++I+l22p3VjY6brOsSWb+XdSaZZmZIH7qzZHI9BmtrTPE2j6voB1u0vYzp6qzSSv8nlbfvBweVI75qt4f0XT/A3hUWZu/wDRrbzJ57u4IUsWYszuenfr6AV5VfwXeo/Dfxpr9vazRaTqupx3kUAUq8lqjoJJcdt4UsfYH1oA7r/ha2i+WLttN11NJJ41VtOcWuM43buu33xXbQTxXNvHcQSLLDKodHQ5VlIyCD3BFZs2q6GPC76lJc2h0Q224yZHlGLGMemMcY/CsD4SRXMPww0ZblHTKSPEr/eETSMY8/8AASv4YoA7WiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAhu7lbOynunBKQxtIwXqQBnj8qqaDrEHiHQbLV7aOSOC8iEqJKAGAPrgkZrRrlIPHdvJ4ut/Dk+iazZ3Fy8y29xcwIsMwiGWZW3kkYxjjuOlADfGWq6zoF7pGr2kc9zosMkiarbW8Qkk2Mo2SAY3YQgkgdjXM+I/EWnfEYaXoXhjzr4/b4bm5vBA8cdpHG24ksyj5z0A9z0r0u+ujZWFxdC3nuTDGziG3UNJJgZ2qCRkntzWJ4Y8ZW3ii81Kzj0zU9PutOMYnh1CJY2HmKWXAVm7DPOOooAqfEKy8LHw7NqnifT47qKyXdFglZS54CIykMCxwMA/yrP+GPguLwloc+oXVrHbanqTfaLiNSSLdOqxAnJO0HknJJzyeK76ua0Px1o/iHxNq2had58k+mY86YqvlMc4IU5ycHIPA6d6APMbj4g+F/HWuMdf1uKx8MWUuYNOcPvv3HSSXA4jHZO/U16zoHiXQPFFpMdEvYby3gxHII0IVcjgYIHase++JGmQajdWWn6XrWtPaN5dzJpdn5yQv3UtkAsPQZrc0HxLpXiTSTqWm3Ie3VmSXeCjRMv3lcHlSPegDy7VPAPhbxF8QY9D0fR4oLTT3W61meJ3Cbjyluq52qW6tgDA4z2r2VEWNFRFCoowqqMAD0FcTH8VNBkkjka11aLS5ZRFHq8lmy2jMTgfP1AJ4yQBXcUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWRo9zrU9/q6apZwwW0NzssHj6yw7R8zfMec5HQfStesjR/ENtrV/q9nBFMj6Zc/ZpTIBhm2hsrg9Oe+KANeuF8Uf8lZ8A/7mpf8AolK7quF8Uf8AJWfAP+5qX/olKAO6rhfCn/JU/iD/AL+n/wDpPXdVwvhT/kqfxB/39P8A/SegC1481y8t4LTw7oj413WWMMDD/l3jH+snPoFHT3x1xXO+GdHtfC3xC1nTNNXZDZ6BbhCerNuclj6knJPuauSeFvG9r431bxDp954eme8CwwG/imZ4IF6RrtIAyeT1yay9Ah8VSfGPVI9Wl0Vi2lxLefZY5QDES4Xy9zHDbuucjHSgDpPhHCkPwu0MqPmliaWRu7OzsSSe5qpoVlbzfEr4gabImbO6gs2liBKgl4nVzx0JA5I5rL8IeMdM8BeH4vC3ix5tNvdNZ4o5JLeRo7qPcSrxsoIPBAx1zTbCPxJq9p408W6DDNYXmpNbjSo7mIB5YoBySrDA8zLAZ9QfegBfidNe6b4RbwzZeHpIPDvlQ28uqhvNS1gBGT5Qy52gdT9c16fZSwTWFvLayia3eJWikVtwdSODnvkV5/qHxR0TUdBubG2s7+bXbiBoRozWcgmEjLja+V2hQTyc4x+VdV4M0efw/wCDNI0m6cNcWtqkcpByA2OQD6A8fhQBu0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGL4q8Uab4P0CfV9TkKwx8JGv35XPRFHcn/E9q8jsLX4i/FwHUJ9Ufw14ckJ8iKDcHlX6AguPckD0FSeP4m8c/G/Q/B8rMdM
|
|||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAIAAAA12IJaAAEAAElEQVR4AeydBWAd15W/xcxkgUFgS2Zm5sQOOcwNtoGmSZt2m6bd3Xb/xSRtkyZpkoaZOXbMzGzLlkGWZDEzs/7faOzp65PsOmrAz/6pbyf33blz5843L9lzzj3g3NHR4aQ/ERABERABERABERABERCB84OAy/nxmHpKERABERABERABERABERABg4AUAP0OREAEREAEREAEREAEROA8IiAF4Dx62XpUERABERABERABERABEZACoN+ACIiACIiACIiACIiACJxHBKQAnEcvW48qAiIgAiIgAiIgAiLwTRAgrc7TTz89efLkwMDAxMTEW265JScnp9sb1dbW/uY3v5k/f35YWFh8fPxVV1310ksvdZuVp7Cw8Je//OWIESP8/f3j4uIWLVr03nvv/Ydzmpc7d3u/bqdWpwiIgAiIgAiIgAiIgAiIQFcCV1xxxSeffBISEoK8XlBQcOTIkYCAgLVr144ePdp28LZt22666ab09HRfX99Ro0ZVVVUdOnSora1t1qxZr776at++fa3BjLzooovKy8sjIyOHDh1aXFx8+PDhlpYWOt99910/Pz/bkWc4p3WJEwqA/kRABERABERABERABERABHpGAIkc2frCCy+srq42Z3jllVfoQRlAuLfmRIgPDg52c3P7wx/+0NraavaXlZVdffXVDEZVQL43O0tKSthJoNN2ZG5uLtI/nffcc08P5rQuoSEFwJaG2iIgAiIgAiIgAiIgAiLw1QhceumlyOXY9W0vQx+gMzU11eq8+eab6Xn88cetHquBIxCn/vjHP5o9Dz74IF9//vOfWwPMRmNj45AhQ5ydnfft22f2nPmctlMpBgC8+hMBERABERABERABERCBHhLA52fgwIE49Ntej/mfr/jtmJ3I7m+//XZCQsJ9991nO8xsP/HEE+wMvPbaa+bXTz/91MPD41e/+pXdSE9Pzx/+8IeI8lu2bOHUV5rTdio32y9qi4AIiIAIiIAIiIAIiIAIfCUCO3bs6Do+LS2NzgEDBpinTF//SZMmIeh3HRwTE5OUlIS2UF9f7+Pjk5WVRdQvUQRdR6Jp0HngwAGOX2lO26m0A2BLQ20REAEREAEREAEREAERMAj8/ve/x9nmrbfe6gGOpUuXYsWPjo425XVmwBeII2L9qWZDVWhvbz927BhHtgL+9re/dTsyIyODfjMI+MzntJuqGxXEboS+ioAIiIAIiIAIiIAIiIAI/FsCn3/++YoVK1JSUtatW0eenzfeeAMVwrzKzPCDaf9Uk2RmZnIKq7+Li8uNN954qmHvvPMOp6ZOncrxzOe0m00KgB0QfRUBERABERABERABERCBnhDYunXr3//+d/PK2NjYXr16WbMMGzYMZYAB5AVydXW1+s0GaX/w52E8V9mdsv368ssvr169mjhgMx1Qj+eUC5AtVbVFQAREQAREQAREQAREwCBw9913k87/kksuOXMcVPgi1+euXbsI1eXasWPHmtG6zEAxr4svvhgPn2effbbrhKT9aW5uvv32260dg65jNm/ezLReXl5sApgqRI/nVCGwrnjVIwIiIAIiIAIiIAIiIAL/EYEPP/yQBP9RUVH49pDSh7loYLwn2f/vfve7n/3sZ7j60EnpgB/96Eevv/46JQLw6ac8cLd33bhxI1Z/0v58/PHHKBLWmJ7NKQXAAqiGCIiACIiACIiACIiACHxtBMzywO+9994111xjTrp8+XIy9+Pwg68/lYDr6uqSk5Ox/XP2hRdeuPPOO7u995o1a9iIYBhTMafdmB7MKRcgO4b6KgIiIAIiIAIiIAIiIAJnRICMPVVVVeTu7Ha06alvpuw0B1xwwQVI/Pfffz9JP0keWl5enpiYyKkZM2bccccd3U5CVDEmfyoHs6XQVfrnkh7MqSDgblGrUwREQAREQAREQAREQAT+DYG8vDxS8SCCL1u2rOvQoKCgrp2RkZFWik8CBnAKIl8Q0b3dev8vWbLkyiuv5BRJRRcsWNB1NrPnK83JJVIATkVS/SIgAiIgAiIgAiIgAiJwOgIU8CIqF6N+t7l99u3bx8W4+pxqinvuuae0tPSpp56yqyJsjkfov/baaykcRnbROXPmnGoSu/7Tz2kOlguQHTR9FQEREAEREAEREAEREAGnioqK9PT02tra07AgkBcLfUFBwYsvvmg3DMn+ueeeo6zv5MmT7U6ZX999910ieqdPn05un64DPvjgA2KIiR6mptiZS/+nn9O6ixQAC4UaIiACIiACIiACIiACInCCwDPPPNO/f//PPvvs9ET+93//l3Sc995775NPPomnvjmYfD4LFy5EB/jDH/6Af07XGYqKiu677z7Ug26df95+++3rr78e1yACANAQul7ebc/p57S9RC5AtjTUFgEREAEREAEREAEREIGvQIAo3o8++gh5/YEHHvjVr341btw45H6qehEfjIhPis9u56LIQFlZGcEACQkJdgPS0tLIFMTlvXv3/utf/2p31vxKUqDvfe97dqdOM6fdSCkAdkD0VQREQAREQAREQAREQAS+AoF58+YRBvD000/jtb99+3Zy/+MXdNddd82ePbvbWTDwM3Lq1KloCF0HkBsU6Z/+lM6/rgPo6Vow+PRz2k2iOgB2QPRVBERABERABERABERABM5lAooBOJffrp5NBERABERABERABERABOwISAGwA6KvIiACIiACIiACIiACInAuE5ACcC6/XT2bCIiACIiACIiACIiACNgRkAJgB0RfRUAEREAEREAEREAEROBcJiAF4Fx+u3o2ERABERABERABERCBHhOgEJizzd+gQYNONdWZj7SbgeT9ISEh3OSRRx6xO1VYWEgW0aSkJAoCBAcHjxkz5re//W1lZaXdML52dHSQg4iKY4GBgaQlveWWW3JycroOs3qUBtRCoYYIiIAIiIAIiIAIiIAI/JMAkveiRYvM76evCHbmI/85e2eLTKCUHLbr5OuaNWtuuOEG1INevXpNmjSpvLycTKN79ux59tlnP//887Fjx9peQtbRTz75BEUCJYGyxK+//jppRteuXTt69GjbYVZbCoCFQg0REAEREAEREAEREAER+CcBivgiWJvf3d3d/3miS+vMR9peilLx4Ycfent7NzQ02PZTR2z+/PlUA3jiiSfQEFxdXTnLGAqNPf744wsWLDh48CCKgXnJe++9xyIvvPDC999/n5rEdL766qu33Xbb7bffjsLg4tKNv083Xba3V1sEREAEREAEREAEREAEROBrJ1BVVXXvvfci/T/00EN2k//6179ua2t7/vnnqS5sSv8MYCSFgX/5y19Safipp56yLqEEGO2///3vpvRP+9Zbb0Uf2L9/P45J1jDbhhQAWxpqi4AIiIAIiIAIiIAIiMC3QQC5Pz8/H1m/f//+tvejEvDHH39MOWFM+Lb9ZvvBBx/08vJ6+eWXrVP4/AwcODA+Pt7qoTFixAiOhw8ftu202lIALBRqiIAIiIAIiIAIiIAIiMC3QWDDhg0Y+BHTf/rTn9rd7+jRozj/TJgwoVvvndDQ0MGDByP019bWmhfu2LGjq6CflpbG2QEDBthNbn6VAtAtFnWKgAiIgAiIgAiIgAicgwR+//vfk3Lnrbfe+g6frbGx8fvf/z7y/YsvvujmZh+RW11dzdoQ9E+1QvOUpQB0HbZ06VKCgKOjo9kZ6HqWHvtbdjtInSIgAiIgAiIgAiIgAiIgAl8Lgf/3//5famrqT37yE7tkPubkeP/T8PPzO9W9PDw8OGUOsx1DdqAVK1akpKSsW7eOrERvvPEGqo7tAKstBcBCoYYIiIAIiIAIiIAIiIAIfLMEiM197LHH+vXrR1L/09zpVLI7l5zq1NatWwkFNueMjY210gR1vYtcgLoyUY8IiIAIiIAIiIAIiMC5SeDuu+8+cuTIJZdc8p08Hmb7O+64o7W1lXT+GOm/3jX85je/KS4u3rVr1w9/+EOeke2FLVu2dHsL7QB0i0WdIiACIiACIiACIiAC5yABHOhNH/rv5NnI4r97924
|
|||
|
|
"text/plain": [
|
|||
|
|
"<PIL.Image.Image image mode=RGB size=1024x768>"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"def load_and_visualize_gmsh(filename):\n",
|
|||
|
|
" \"\"\"读取并可视化Gmsh文件的完整流程\"\"\"\n",
|
|||
|
|
" \n",
|
|||
|
|
" print(f\"正在处理文件: {filename}\")\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 检查文件是否存在\n",
|
|||
|
|
" if not os.path.exists(filename):\n",
|
|||
|
|
" print(f\"✗ 文件不存在: {filename}\")\n",
|
|||
|
|
" return None\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 读取Gmsh文件\n",
|
|||
|
|
" mesh = read_gmsh_file(filename)\n",
|
|||
|
|
" if mesh is None:\n",
|
|||
|
|
" return None\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 转换为PyVista格式\n",
|
|||
|
|
" pv_mesh = meshio_to_pyvista(mesh)\n",
|
|||
|
|
" if pv_mesh is None:\n",
|
|||
|
|
" print(\"✗ 网格转换失败\")\n",
|
|||
|
|
" return None\n",
|
|||
|
|
" \n",
|
|||
|
|
" # 可视化\n",
|
|||
|
|
" return visualize_mesh(pv_mesh, f\"Gmsh文件: {os.path.basename(filename)}\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 示例:读取现有的Gmsh文件\n",
|
|||
|
|
"# 请将下面的文件名替换为您的Gmsh文件路径\n",
|
|||
|
|
"your_gmsh_file = \"t1.msh\" # 替换为您的文件路径\n",
|
|||
|
|
"\n",
|
|||
|
|
"if os.path.exists(your_gmsh_file):\n",
|
|||
|
|
" load_and_visualize_gmsh(your_gmsh_file)\n",
|
|||
|
|
"else:\n",
|
|||
|
|
" print(f\"文件 {your_gmsh_file} 不存在,使用示例文件\")\n",
|
|||
|
|
" load_and_visualize_gmsh(sample_file)"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 10. 总结\n",
|
|||
|
|
"\n",
|
|||
|
|
"这个notebook演示了:\n",
|
|||
|
|
"\n",
|
|||
|
|
"1. ✅ 安装meshio和pyvista库\n",
|
|||
|
|
"2. ✅ 创建示例Gmsh文件\n",
|
|||
|
|
"3. ✅ 使用meshio读取Gmsh文件\n",
|
|||
|
|
"4. ✅ 将meshio网格转换为PyVista格式\n",
|
|||
|
|
"5. ✅ 使用PyVista进行网格可视化\n",
|
|||
|
|
"6. ✅ 高级可视化选项(彩色、线框、点云)\n",
|
|||
|
|
"7. ✅ 读取现有Gmsh文件的完整流程\n",
|
|||
|
|
"\n",
|
|||
|
|
"您可以使用这个notebook作为模板来处理自己的Gmsh模型文件。只需将文件路径替换为您的Gmsh文件即可。"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"metadata": {
|
|||
|
|
"kernelspec": {
|
|||
|
|
"display_name": "Python (forward_modeling)",
|
|||
|
|
"language": "python",
|
|||
|
|
"name": "forward_modeling"
|
|||
|
|
},
|
|||
|
|
"language_info": {
|
|||
|
|
"codemirror_mode": {
|
|||
|
|
"name": "ipython",
|
|||
|
|
"version": 3
|
|||
|
|
},
|
|||
|
|
"file_extension": ".py",
|
|||
|
|
"mimetype": "text/x-python",
|
|||
|
|
"name": "python",
|
|||
|
|
"nbconvert_exporter": "python",
|
|||
|
|
"pygments_lexer": "ipython3",
|
|||
|
|
"version": "3.12.12"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"nbformat": 4,
|
|||
|
|
"nbformat_minor": 4
|
|||
|
|
}
|