当前位置:首页>python>Python实现:TPMS晶格结构生成器,一键导出STL模型

Python实现:TPMS晶格结构生成器,一键导出STL模型

  • 2026-07-02 19:48:26
Python实现:TPMS晶格结构生成器,一键导出STL模型
点击上方蓝字订阅!

三周期极小曲面(TPMS)是一类具有零平均曲率的周期性曲面,在自然界中广泛存在,如蝴蝶翅膀的鳞片、骨骼的微结构等。基于TPMS设计的晶格结构因其优异的力学性能、高比表面积和可控的孔隙率,成为增材制造(3D打印)领域的研究热点。本文提供一个完全自包含的Python脚本,能够根据用户指定的TPMS类型、结构形式(杆状网络型或片状壳体型)和目标体积分数,自动生成封闭的STL网格文件,可直接用于3D打印或有限元分析。

代码的核心思想是将TPMS的隐函数方程离散化到规则网格上,通过Marching Cubes算法提取等值面,并对网格边界添加盖面以保证模型的封闭性。为了精确控制体积分数,程序采用先粗调后二分法的方式自动校准水平集常数r。整个过程无需任何外部几何建模软件,仅依赖NumPy、SciPy和scikit-image三个科学计算库,即可在数秒内生成高精度网格。

import numpy as np
from skimage.measure import marching_cubes, find_contours
from scipy.spatial import Delaunay

# ==================== TPMS 隐函数定义 ====================
deftpms_function(x, y, z, tpms_type):
"""
    计算指定类型TPMS的隐函数值 F(x,y,z)
    支持类型: 'P', 'G', 'D', 'I', 'S', 'F', 'N'
    """

    pi2 = 2 * np.pi
    pi4 = 4 * np.pi

if tpms_type == 'P':
return - (np.cos(pi2 * x) + np.cos(pi2 * y) + np.cos(pi2 * z))
elif tpms_type == 'G':
return (np.cos(pi2 * x) * np.sin(pi2 * y) +
                np.cos(pi2 * y) * np.sin(pi2 * z) +
                np.cos(pi2 * z) * np.sin(pi2 * x))
elif tpms_type == 'D':
return (np.sin(pi2 * x) * np.sin(pi2 * y) * np.sin(pi2 * z) +
                np.sin(pi2 * x) * np.cos(pi2 * y) * np.cos(pi2 * z) +
                np.cos(pi2 * x) * np.sin(pi2 * y) * np.cos(pi2 * z) +
                np.cos(pi2 * x) * np.cos(pi2 * y) * np.sin(pi2 * z))
elif tpms_type == 'I':
return (2 * (np.cos(pi2 * x) * np.cos(pi2 * y) +
                     np.cos(pi2 * y) * np.cos(pi2 * z) +
                     np.cos(pi2 * z) * np.cos(pi2 * x)) -
                (np.cos(pi4 * x) + np.cos(pi4 * y) + np.cos(pi4 * z)))
elif tpms_type == 'S':
return (np.cos(pi4 * x) * np.sin(pi2 * y) * np.cos(pi2 * z) +
                np.cos(pi2 * x) * np.cos(pi4 * y) * np.sin(pi2 * z) +
                np.sin(pi2 * x) * np.cos(pi2 * y) * np.cos(pi4 * z))
elif tpms_type == 'F':
return - (4 * (np.cos(pi2 * x) * np.cos(pi2 * y) * np.cos(pi2 * z)) -
                  (np.cos(pi4 * x) * np.cos(pi4 * y) +
                   np.cos(pi4 * y) * np.cos(pi4 * z) +
                   np.cos(pi4 * z) * np.cos(pi4 * x)))
elif tpms_type == 'N':
return3 * (np.cos(pi2 * x) + np.cos(pi2 * y) + np.cos(pi2 * z)) + \
4 * np.cos(pi2 * x) * np.cos(pi2 * y) * np.cos(pi2 * z)
else:
raise ValueError(f"不支持的TPMS类型: {tpms_type}")

# ==================== 网格生成辅助函数 ====================
defgenerate_grid(x_range, y_range, z_range, n):
"""
    在指定长方体区域内生成规则网格
    返回: 网格点数组, 各轴坐标序列, 网格间距
    """

    x = np.linspace(x_range[0], x_range[1], n + 1)
    y = np.linspace(y_range[0], y_range[1], n + 1)
    z = np.linspace(z_range[0], z_range[1], n + 1)
    xx, yy, zz = np.meshgrid(x, y, z, indexing='ij')
    spacing = ((x_range[1] - x_range[0]) / n,
               (y_range[1] - y_range[0]) / n,
               (z_range[1] - z_range[0]) / n)
return xx, yy, zz, x, y, z, spacing

# ==================== 边界盖面生成 ====================
defadd_isocaps(x_coords, y_coords, z_coords, phi, level=0):
"""
    为三维标量场phi的边界添加等值面盖面(三角剖分)
    返回盖面的顶点和三角形索引(局部坐标)
    """

    nx, ny, nz = phi.shape
    all_verts = []
    all_faces = []
    offset = 0

# 六个边界平面的定义
    planes = [
        (00, x_coords[0], lambda u, v: (x_coords[0], u, v)),
        (0-1, x_coords[-1], lambda u, v: (x_coords[-1], u, v)),
        (10, y_coords[0], lambda u, v: (u, y_coords[0], v)),
        (1-1, y_coords[-1], lambda u, v: (u, y_coords[-1], v)),
        (20, z_coords[0], lambda u, v: (u, v, z_coords[0])),
        (2-1, z_coords[-1], lambda u, v: (u, v, z_coords[-1]))
    ]

for axis, idx, fixed_val, to3d in planes:
# 提取二维切片
if axis == 0:
            slice_phi = phi[idx, :, :]          # shape (ny, nz)
            u_coords = y_coords
            v_coords = z_coords
elif axis == 1:
            slice_phi = phi[:, idx, :]          # shape (nx, nz)
            u_coords = x_coords
            v_coords = z_coords
else:
            slice_phi = phi[:, :, idx]          # shape (nx, ny)
            u_coords = x_coords
            v_coords = y_coords

# 提取等值线轮廓
        contours = find_contours(slice_phi, level)
for contour in contours:
# 将轮廓点从像素坐标映射到实际坐标
            u = u_coords[0] + contour[:, 1] * (u_coords[-1] - u_coords[0]) / (len(u_coords)-1)
            v = v_coords[0] + contour[:, 0] * (v_coords[-1] - v_coords[0]) / (len(v_coords)-1)
            points_2d = np.column_stack((u, v))

if len(points_2d) >= 3:
                tri = Delaunay(points_2d)                     # 三角剖分
                verts_3d = np.array([to3d(ui, vi) for ui, vi in points_2d])
                faces_3d = tri.simplices
                all_verts.append(verts_3d)
                all_faces.append(faces_3d + offset)
                offset += len(verts_3d)

if all_verts:
return np.vstack(all_verts), np.vstack(all_faces)
return np.empty((03)), np.empty((03), dtype=int)

# ==================== 体积与表面积计算 ====================
defstl_volume(vertices, faces):
"""
    计算封闭三角网格的体积(有向)和表面积
    """

    v0 = vertices[faces[:, 0]]
    v1 = vertices[faces[:, 1]]
    v2 = vertices[faces[:, 2]]
# 体积:散度定理
    vol = np.sum((v0[:, 0] * (v1[:, 1] * v2[:, 2] - v2[:, 1] * v1[:, 2]) -
                  v1[:, 0] * (v0[:, 1] * v2[:, 2] - v2[:, 1] * v0[:, 2]) +
                  v2[:, 0] * (v0[:, 1] * v1[:, 2] - v1[:, 1] * v0[:, 2])) / 6.0)
# 表面积
    normals = np.cross(v1 - v0, v2 - v0, axis=1)
    area = 0.5 * np.linalg.norm(normals, axis=1)
return vol, np.sum(area)

# ==================== 二进制STL写入 ====================
defwrite_binary_stl(filename, vertices, faces, title="TPMS Lattice"):
"""
    将三角网格写入二进制STL文件
    """

    vertices = vertices.astype(np.float32)
    v0 = vertices[faces[:, 0]]
    v1 = vertices[faces[:, 1]]
    v2 = vertices[faces[:, 2]]
    normals = np.cross(v1 - v0, v2 - v0, axis=1)
    norms = np.linalg.norm(normals, axis=1, keepdims=True)
    norms[norms == 0] = 1
    normals /= norms
    facets = np.hstack([normals, v0, v1, v2]).astype(np.float32)

with open(filename, 'wb'as f:
        f.write(title.encode('ascii')[:80].ljust(80b'\x00'))
        f.write(np.array(len(faces), dtype=np.uint32).tobytes())
for facet in facets:
            f.write(facet.tobytes())
            f.write(b'\x00\x00')

# ==================== 体积分数校准 ====================
defcalibrate_r(xx, yy, zz, x_coords, y_coords, z_coords, spacing, tpms_type, struct_type,
                vol_frac_target, r_start=-0.07, r_step=0.1, tol=1e-4, max_iter=50)
:

"""
    通过粗调+二分法自动寻找合适的水平集常数r,使体积分数接近目标值
    struct_type: 'net' (杆状) 或 'sheet' (片状)
    """

    F_val = tpms_function(xx, yy, zz, tpms_type)
# 粗调
    r = r_start
    vol_frac = 0
for _ in range(max_iter):
if struct_type == 'net':
            phi = F_val + r
else:
            phi = -(F_val + r) * (F_val - r)

        verts, faces, _, _ = marching_cubes(phi, level=0, spacing=spacing)
        verts[:, 0] += xx[0,0,0]
        verts[:, 1] += yy[0,0,0]
        verts[:, 2] += zz[0,0,0]
if len(verts) > 0and len(faces) > 0:
            cap_verts, cap_faces = add_isocaps(x_coords, y_coords, z_coords, phi, level=0)
if len(cap_verts) > 0:
                all_verts = np.vstack([verts, cap_verts])
                all_faces = np.vstack([faces, cap_faces + len(verts)])
else:
                all_verts, all_faces = verts, faces
            vol, _ = stl_volume(all_verts, all_faces)
            vol_frac = abs(vol)
else:
            vol_frac = 0

if abs(vol_frac - vol_frac_target) < tol:
break
if vol_frac < vol_frac_target:
            r += r_step
else:
            r -= r_step
if r > 1or r < -1:
break

# 二分法精调
if vol_frac > vol_frac_target:
        r1, r2 = r - r_step, r
else:
        r1, r2 = r, r + r_step
for _ in range(max_iter):
        r = (r1 + r2) / 2
if struct_type == 'net':
            phi = F_val + r
else:
            phi = -(F_val + r) * (F_val - r)

        verts, faces, _, _ = marching_cubes(phi, level=0, spacing=spacing)
        verts[:, 0] += xx[0,0,0]
        verts[:, 1] += yy[0,0,0]
        verts[:, 2] += zz[0,0,0]
if len(verts) > 0and len(faces) > 0:
            cap_verts, cap_faces = add_isocaps(x_coords, y_coords, z_coords, phi, level=0)
if len(cap_verts) > 0:
                all_verts = np.vstack([verts, cap_verts])
                all_faces = np.vstack([faces, cap_faces + len(verts)])
else:
                all_verts, all_faces = verts, faces
            vol, _ = stl_volume(all_verts, all_faces)
            vol_frac = abs(vol)
else:
            vol_frac = 0

if abs(vol_frac - vol_frac_target) < tol:
break
if vol_frac > vol_frac_target:
            r2 = r
else:
            r1 = r
return r, vol_frac

# ==================== 主程序 ====================
defmain():
# ---------- 用户可调参数 ----------
    n_final = 80# 最终网格分辨率(越高越精细)
    n_calib = 60# 校准用分辨率
    tpms = 'P'# TPMS类型: P, G, D, I, S, F, N
    struct_type = "net"# "net" 或 "sheet"
    vol_frac_target = 0.27# 目标体积分数 (0~1)
    num_cell = 1# 每个方向上的晶胞个数
    target_size = 1.0# 最终模型的边长
    center = np.array([000])  # 模型中心坐标
# -------------------------------

    print("=" * 50)
    print("TPMS 晶格结构生成器")
    print(f"类型: {tpms}, 结构: {struct_type}, 目标体积分数: {vol_frac_target}")
    print("=" * 50)

# 1. 校准水平集常数 r
    print("正在校准水平集常数 r ...")
    x_range = (01)
    y_range = (01)
    z_range = (01)
    xx, yy, zz, xc, yc, zc, sp = generate_grid(x_range, y_range, z_range, n_calib)
    r, vol_frac = calibrate_r(xx, yy, zz, xc, yc, zc, sp, tpms, struct_type, vol_frac_target)
    print(f"校准完成: r = {r:.6f}, 实际体积分数 = {vol_frac:.6f}")

# 2. 生成最终网格
    print("正在生成最终网格 ...")
    x_range_f = (0, num_cell)
    y_range_f = (0, num_cell)
    z_range_f = (0, num_cell)
    xx_f, yy_f, zz_f, xc_f, yc_f, zc_f, sp_f = generate_grid(x_range_f, y_range_f, z_range_f, n_final)

    F_final = tpms_function(xx_f, yy_f, zz_f, tpms)
if struct_type == 'net':
        phi_f = F_final + r
else:
        phi_f = -(F_final + r) * (F_final - r)

    verts, faces, _, _ = marching_cubes(phi_f, level=0, spacing=sp_f)
    verts[:, 0] += x_range_f[0]
    verts[:, 1] += y_range_f[0]
    verts[:, 2] += z_range_f[0]

    cap_verts, cap_faces = add_isocaps(xc_f, yc_f, zc_f, phi_f, level=0)
if len(cap_verts) > 0:
        all_verts = np.vstack([verts, cap_verts])
        all_faces = np.vstack([faces, cap_faces + len(verts)])
else:
        all_verts, all_faces = verts, faces

# 平移和缩放
    all_verts -= center
    all_verts *= target_size

    vol, _ = stl_volume(all_verts, all_faces)
    vol_frac_final = abs(vol) / (target_size ** 3)
    print(f"最终模型体积分数: {vol_frac_final:.6f}")

    write_binary_stl('lattice.stl', all_verts, all_faces)
    print("STL文件已保存为 lattice.stl")

if __name__ == "__main__":
    main()

代码使用说明

上述代码完全独立,只需安装依赖库即可运行:

pip install numpy scipy scikit-image

所有核心算法均内嵌于脚本中,无需任何外部几何处理软件。用户只需修改主函数开头的参数(如TPMS类型、结构形式、目标体积分数、晶胞数量和模型尺寸),运行后即可在当前目录下生成lattice.stl文件。该文件可直接导入3D建模软件(如Blender、MeshLab)或切片软件,用于增材制造。

技术要点深度解读

TPMS的数学本质是隐函数F(x,y,z)=c,其中c为水平集常数。当c=0时,曲面通过原点;改变c可连续调整曲面的体积分数。对于杆状网络结构(net),曲面定义为F(x,y,z)=r;对于片状壳结构(sheet),曲面定义为(F+r)(F-r)=0,相当于两个等值面的夹层区域。通过二分法自动寻找合适的r,使得模型体积分数逼近目标值,这是整个算法的关键所在。

在网格生成环节,Marching Cubes算法将隐函数离散化后提取三角形面片,但原始输出是开放的(模型边界处有孔洞)。为了获得可用于实体打印的封闭模型,代码额外为六个边界平面添加了盖面:对每个边界平面上的隐函数值进行二维等值线提取,再使用Delaunay三角剖分生成填充面。这种方法保证了最终模型的水密性,可直接用于体积计算和3D打印。

体积分数的精确控制依赖于封闭网格的体积计算。代码通过散度定理计算有向体积,避免了繁琐的四面体剖分,仅需一次遍历所有三角形即可获得高精度结果。校准过程中,粗调阶段采用变步长搜索快速逼近目标区间,精调阶段使用二分法进一步收敛,兼顾了效率与准确性。

该实现将数学定义、离散化、网格生成、边界处理、体积校准和文件输出整合为一条流畅的流水线,为TPMS晶格结构的快速设计提供了一套开箱即用的解决方案。无论是用于科研中的力学性能分析,还是工程中的轻量化设计,都能从中获得高效支持。

 • end • 

陪伴是最长情的告白

 为你推送最实用的资讯 

识别二维码 关注我们 

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 09:34:28 HTTP/2.0 GET : https://f.mffb.com.cn/a/488268.html
  2. 运行时间 : 0.088171s [ 吞吐率:11.34req/s ] 内存消耗:4,764.23kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=cfd7b80e4cbcbc7517030aaefa2b1818
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000606s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000789s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000360s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000287s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000509s ]
  6. SELECT * FROM `set` [ RunTime:0.000212s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000608s ]
  8. SELECT * FROM `article` WHERE `id` = 488268 LIMIT 1 [ RunTime:0.000770s ]
  9. UPDATE `article` SET `lasttime` = 1783128868 WHERE `id` = 488268 [ RunTime:0.011431s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000277s ]
  11. SELECT * FROM `article` WHERE `id` < 488268 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000529s ]
  12. SELECT * FROM `article` WHERE `id` > 488268 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000384s ]
  13. SELECT * FROM `article` WHERE `id` < 488268 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001467s ]
  14. SELECT * FROM `article` WHERE `id` < 488268 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001159s ]
  15. SELECT * FROM `article` WHERE `id` < 488268 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000800s ]
0.089843s