VTK_python入门

2023-10-27

tk基本介绍

  1. VTK 库的框架结构

vtkObject -> vtkSource -> vtkFilter -> vtkMapper -> vtkActor -> vtkRenderer

对象 介绍
vtkObject vtk库的基类
vtkSource vtkFilter父类,为为整个可视化流程的开始定义具体的行为和接口,比如读取数据
vtkFilter 对原始数据进行滤波器处理,转化成可以直接应用算法模块的形式
vtkMapper 它将 vtkFilter 处理后的应用数据映射为几何数据,相当于为原始数据和图像数据之间定义了接口
vtkActor 表示渲染场景下一个特定物体(几何结构和属性)
vtkRenderer 为渲染器提供一种抽象规范,最终 vtkActor 通过 vtkRenderer 类将结果在窗口中显示出来

在这里插入图片描述

  1. vtk基本对象

    基本对象 介绍
    渲染控制器 定义与设备无关的坐标计算方法,创建渲染窗口
    渲染窗口 渲染窗口管理显示设备上的窗口,绘制方法可在渲染窗口上创建一个场景;渲染窗口是用户图形界面,其中包括了设置渲染窗口的大小,产生立体显示效果等方法
    渲染器 渲染器(Renderer)是管理光源照相机和绘制对象等的位置、属性等,提供了世界坐标系,观察坐标系及显示坐标系之间的转换
    灯光 灯光可在场景中照亮绘制对象
    摄像机 摄像机是定义观察者的位置
    角色 角色代表渲染场景中的绘制对象实体,通过参数调节可以设置角色的位置、方向、渲染特性、引用、纹理映射等属性,并可对角色进行缩放。
    特性 特性是说明几何物体的一些特性,实现三维图形真实感
    映射 映射制定了渲染数据和图形库中基本图元之间的联系
    变换 变换是一个放置 4x4 变换矩阵的堆栈,可以进行各种操作

    在vtk中绘制或者渲染一个场景,需要以下基本对象

  • vtkRenderWindow

  • vtkRenderer

  • vtkLight

  • vtkCamera

  • vtkActor

  • vtkProperty

  • vtkMapper
    在这里插入图片描述
    在这里插入图片描述

# 案例
import vtk
def Create():
    arrow_source = vtk.vtkArrowSource() # 数据源 箭头
    mapper = vtk.vtkPolyDataMapper() # 创建映射器
    mapper.SetInputConnection(arrow_source.GetOutputPort()) #映射器添加箭头的数据源
    actor = vtk.vtkActor() # 创建演员
    actor.SetMapper(mapper) # 给演员添加映射器
    ren = vtk.vtkRenderer() #创建绘制器
    ren.AddActor(actor) #绘制器加演员
    renWin = vtk.vtkRenderWindow() #创建显示窗口
    renWin.AddRenderer(ren) #向窗口中加入绘制器
    renWin.Render() #窗口读取绘制器,并生成图形

    iren = vtk.vtkRenderWindowInteractor() #窗口交互器
    iren.SetRenderWindow(renWin) #交互器中加入窗口
    iren.Initialize()
    iren.Start()
Vtk柱体
cylinder = vtk.vtkCylinderSource()
    cylinder.SetHeight(3.0)
    cylinder.SetRadius(1.0)
    cylinder.SetResolution(360)
    print("高:{0};半径:{1};角度:{2}".format(cylinder.GetHeight(),cylinder.GetRadius(),cylinder.GetResolution()))
    
	# 映射,将输入的数据转换为几何图元(点、线、多边形)进行渲染
    mapper =vtk.vtkPolyDataMapper()
    # 设置 VTK 可视化管线的输入数据接口,对应的可视化管线输出数据的接口为 GetOutputPort()
    mapper.SetInputConnection(cylinder.GetOutputPort())

    actor = vtk.vtkActor()

    prop = vtk.vtkProperty()
    prop.SetColor(0.6,0.96,1)
    bmpReader = vtk.vtkBMPReader()
    bmpReader.SetFileName("sky.bmp")
    texture = vtk.vtkTexture()
    texture.SetInputConnection(bmpReader.GetOutputPort())
    texture.InterpolateOn()
    actor.SetProperty(prop)
    actor.SetTexture(texture)
    
    actor.SetMapper(mapper)

    renderer = vtk.vtkRenderer()
    renderer.AddActor(actor)
    renderer.SetBackground(0.1,0.2,0.4)

    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(renderer)
    renWin.SetSize(1200,1200)
    renWin.Render() # 绘制窗口内所有绘制器同步渲染绘制

    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)
    iren.Initialize() #必须
    iren.Start() #开始进入事件响应循环

三维空间中渲染对象最常用的是vtkProp子类是vtkActor(几何数据)和vtkVolume(体数据)

vtkProp子类负责确定渲染场景中对象的位置、大小和方向信息。
Prop依赖于两个对象(Prop一词来源于戏剧里的“道具”,在VTK里表示的是渲染场景中可以看得到的对象。)一个是Mapper(vtkMapper)对象,负责存放数据和渲染信息,另一个是属性(vtkProperty)对象,负责控制颜色、不透明度等参数。

VTK数据结构

import vtk

# *******三个点 加拓扑*******
# 创建点数据
points = vtk.vtkPoints()
# 创建顶点类型 points是坐标不是顶点
vertices = vtk.vtkCellArray()

# 创建点的坐标
points_list = [[1,0,0],[0,0,1],[0,0,0]]

for point in points_list:
    # 每个点坐标加入到 vtkPoints 中,返回加入点的索引号
    id = points.InsertNextPoint(point)
    # 在每个坐标点上分别创建一个顶点,顶点是单元 Cell 里的一种类型
    vertices.InsertNextCell(1)
    vertices.InsertCellPoint(id)

line0 = vtk.vtkLine()
# 线有两个端点,连接两个point
line0.GetPointIds().SetId(0,0) 
line0.GetPointIds().SetId(1,1)

line1 = vtk.vtkLine()
line1.GetPointIds().SetId(0,1)
line1.GetPointIds().SetId(1,2)

line2 = vtk.vtkLine()
line2.GetPointIds().SetId(0,2)
line2.GetPointIds().SetId(1,0)

lines = vtk.vtkCellArray()
lines.InsertNextCell(line0)
lines.InsertNextCell(line1)
lines.InsertNextCell(line2)

# 创建 vtkPolyData 对象
polydata = vtk.vtkPolyData()
# 指定数据集的几何结构(由 points 指定)
polydata.SetPoints(points)
# 指定数据集的拓扑结构(由 vertices 指定)
polydata.SetVerts(vertices)

polydata.SetLines(lines)


mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(polydata)
actor = vtk.vtkActor()
actor.SetMapper(mapper)

actor.GetProperty().SetPointSize(10)
actor.GetProperty().SetLineWidth(10)

render = vtk.vtkRenderer()
render.SetBackground(0, 0, 0)

# Renderer Window
window = vtk.vtkRenderWindow()
window.AddRenderer(render)
window.SetSize(600, 600)

# System Event
win_render = vtk.vtkRenderWindowInteractor()
win_render.SetRenderWindow(window)

# Style
win_render.SetInteractorStyle(vtk.vtkInteractorStyleMultiTouchCamera())

# Insert Actor
render.AddActor(actor)

win_render.Initialize()
win_render.Start()

可视化基础

单元 Cell 是可视化的基础,单元是一系列有序的点按指定类型连接所定义的结构。这些点的连接顺序通常被称为顶点列表(Connectivity List);所指定的类型定义了单元的拓扑结构;点的坐标定义了单元的几何结构。

单元就是有序点集

单元是由单元类型单元顶点列表 两部分构成

单元类型:决定点集的顺序,也就是拓扑

单元顶点列表由点的索引号表示,通过索引号可以找到坐标值

线性单元和非线性单元

VTK 单元类型分为线性和非线性和其他类型。单元类型的线性和非线性划分主要是以插值函数为依据。

线性单元

线性单元采用的是线性或者常量插值函数。单元里的任意一条辨都是由两个点连接定义的。常见的有:

单元
Vertex 顶点,由一个点定义,是零维的基本类型
Polyvertex 多顶点,多个顶点组合而成,是零维的组合单元,其定义不受顶点顺序的限制
Line 直线,一维的基本类型,由两个点定义,方向是从第一个点指向第二个点
Polyline 折线,由一条或多条直线组合而成,属于一维的类型。由n+1个有序的点连接定义的,n表示折线的线段条数,每两个点(i, i+1)定义一条线段
Triangle 三角形,二维的基本类型,由三个点按逆时针的方向连接定义的,点的连接方向和表面法向量符合右手法则
非线性单元

数值分析领域里为了更准确、精确地表达数据,采用非线性单元作为数据的基本表达结构。线性单元可以很容易转换成线图元被图形库处理,非线性单元不被图形库直接支持,因此非线性单元必须先转换成线性单元后才能被图形库支持。

VTK除了提供一套复杂的非线性单元接口框架,另一种做法就是在非线性单元的每一条曲线增加一个关键点,或者增加一个曲面来近似模拟非线性单元。

属性数据

属性数据主要用于描述数据集的属性特征,对数据集的可视化实质上是对属性数据的可视化,例如根据温度显示不同的颜色。

vtk也有矢量数据,VTK的矢量数据也是指既有大小也有方向的量,三维方向上用三元组(Triple)表示为(u, v, w),如速度、应力、位移等。

import vtk

points = vtk.vtkPoints()
points.InsertNextPoint(0,0,0)
points.InsertNextPoint(1,0,0)

polydata = vtk.vtkPolyData()
polydata.SetPoints(points)

weights = vtk.vtkDoubleArray()
weights.SetNumberOfValues(2)
weights.SetValue(0,1)
weights.SetValue(1,2)

polydata.GetPointData().SetScalars(weights)

weight = polydata.GetPointData().GetScalars().GetValue(0)

print(weight)
数据集

数据集由组织结构(拓扑和几何)以及属性数据组成。

  • vtkImageData

在这里插入图片描述

vtkImageData 类型的数据是按规则排列在矩形方格中的点和单元的集合,如果数据集的点和单元排列在平面(二维)上,称此数据集为像素映射(Pixmap)、位图或图像,由 vtkPixel 单元组成;如果排列在层叠面(三维)上,则称为体 (Volume),由 vtkVoxel 单元组成。数据维数用一个三元组 (nx, ny, nz) 来表示,分别表示在 X、Y 和 Z 方向上点的个数。

  • vtkPolyData

在这里插入图片描述

多边形数据集 vtkPolyData 由顶点 (Vertex)、多顶点 (Polyvertex)、线 (Line)、折线 (Polyline) 和三角条带 (Triangle Strip) 等单元构成,多边形数据是不规则结构的,并且多边形数据集的单元在拓扑维度上有多种类型,多边形数据是数据、算法和高速计算机图像学的桥梁。

  • vtkRectilinearGrid

在这里插入图片描述

vtkRectilinearGrid 类型(线性网格)的数据是排列在矩形方格中的点和单元的集合,线性网格的拓扑结构是规则的,但其几何结构只是部分规则,也就是说,它的点是沿着坐标轴排列的,但是两点间的间隔可能不同,与 vtkImageData 类型的数据相似,线性网格是由像素或体素等单元组成的,它的拓扑结构通过指定网格的维数来隐式表达,几何结构则通过一系列的 x, y, z 坐标来表达。

  • vtkStructuredGrid

在这里插入图片描述

vtkStructuredGrid 是结构化网格数据,具有规则的拓扑结构和不规则的几何结构,但是单元之间没有重叠或交叉,如图(c)所示。结构化网格的单元是由四边形或六面体组成,结构化网格通常用于有限差分分析。典型的应用包括流体流动、热量传输和燃烧学等。

  • vtkUnstructuredGrid

在这里插入图片描述

vtkUnstructuredGrid,非结构化网格是最常见的数据集类型,它的拓扑结构和几何结构都是不规则的,在此数据集中所有单元类型都可以组成任意组合,所以单元的拓扑结构从零维延伸至三维,如图(f)所示。

VTK中任一类型的数据集都可用非结构化网格来表达,vtkUnstructuredGrid 类型数据的存储需要大量的空间以及计算时需要消耗大量的资源,除非迫不得已,一般较少使用此种类型的数据集。非结构化网格主要用于有限元分析、计算几何和几何建模等领域。

  • vtkUnstructuredPoints

在这里插入图片描述

vtkUnstructuredPoints,非结构化点集,是指不规则地分布在空间的点集。非结构化点集具有不规则的几何结构,不具有拓扑结构,非结构化点集用离散点来表达。

通常,这类数据没有固定的结构,由一些可视化程序识别和创建的,非结构化点集适合表现非结构化数据,为了实现数据的可视化,可将这种数据形式转换成其它一些结构化的数据形式

img

数据集的存储
  • vtkDataArray 数据集的访问基于索引,从零开始

  • Tuple(元组)的概念

许多可视化数据是由多个数据分量组成的,如RGB颜色数据由红、绿、蓝三个分量组成,为了在连续数组中表达这一类数据,VTK引入了元组(Tuple)的概念。元组是数据数组的子数组,用于存储数据类型相同的分量数据,元组的大小在给定后不会改变。

vtkDataArray 存储的是数值数据,如属性数据 (Attribute Data) 和点数据 (Point) 等。有些属性数据,如点、矢量、法向量和张量等,在定义时就需要指定元组的大小。例如,点、矢量和法向量等属性数据,元组的大小是3,而张量属性数据的元组大小是9 (即3×3的矩阵),标量属性数据对于元组的大小则没有任何要求,对于处理标量属性数据的算法,通常都是只处理标量每一个元组数据的第一个分量。VTK提供了将多分量的数据数组分离成单一分量的数据数组,以及将单一分量的数据数组合并成多分量的数据数组的类,即 vtkSplitField 和 vtkMergeFields。

import numpy
import vtk
from vtk.util.numpy_support import numpy_to_vtk

if __name__ == '__main__':
    # 读取 txt 文档
    source_data = numpy.loadtxt("bun000.txt")

    # 新建 vtkPoints 实例
    points = vtk.vtkPoints()
    # 导入点数据
    points.SetData(numpy_to_vtk(source_data))
    # 新建 vtkPolyData 实例
    polydata = vtk.vtkPolyData()
    # 设置点坐标
    polydata.SetPoints(points)

    # 顶点相关的 filter
    vertex = vtk.vtkVertexGlyphFilter()
    vertex.SetInputData(polydata)

    # mapper 实例
    mapper = vtk.vtkPolyDataMapper()
    # 关联 filter 输出
    mapper.SetInputConnection(vertex.GetOutputPort())

    # actor 实例
    actor = vtk.vtkActor()
    # 关联 mapper
    actor.SetMapper(mapper)

    # render
    render = vtk.vtkRenderer()
    render.SetBackground(0, 0, 0)

    # Renderer Window
    window = vtk.vtkRenderWindow()
    window.AddRenderer(render)
    window.SetSize(1200, 1200)

    # System Event
    win_render = vtk.vtkRenderWindowInteractor()
    win_render.SetRenderWindow(window)

    # Style
    win_render.SetInteractorStyle(vtk.vtkInteractorStyleMultiTouchCamera())

    # Insert Actor
    render.AddActor(actor)
    win_render.Initialize()
    win_render.Start()
def data_actor_transform(source_data):


    points = vtk.vtkPoints()
    points.SetData(numpy_to_vtk(source_data))

    polydata = vtk.vtkPolyData()
    polydata.SetPoints(points)

    vertex = vtk.vtkVertexGlyphFilter()
    vertex.SetInputData(polydata)
   # 设置变换过程
    transform = vtk.vtkTransform()
    transform.Translate(0,0,0)
    transform.RotateY(180)
   # 新建变换的 filter
    transformFilter = vtk.vtkTransformPolyDataFilter()
     # 将变换 filter 输入设置为点数据模型 
  transformFilter.SetInputConnection(vertex.GetOutputPort())
    # 设置变换过程
    transformFilter.SetTransform(transform)
    transformFilter.Update()

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(transformFilter.GetOutputPort())

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    return  actor

vtk.vtkTransformPolyDataFilter()
# 将变换 filter 输入设置为点数据模型
transformFilter.SetInputConnection(vertex.GetOutputPort())
# 设置变换过程
transformFilter.SetTransform(transform)
transformFilter.Update()

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(transformFilter.GetOutputPort())

actor = vtk.vtkActor()
actor.SetMapper(mapper)

return  actor

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VTK_python入门 的相关文章

  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • 在 Qt 中,许多插槽连接到同一信号,它们在发出信号时是否按顺序调用?

    In the Qt文件说 如果多个插槽连接到一个信号 则这些插槽将 按照它们连接的顺序一个接一个地执行 当信号发出时 但在connect 功能 设置Qt ConnectionType输入为Qt QueuedConnection意思是 当控制
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • QByteArray 到整数

    正如您可能从标题中看出的那样 我在转换QByteArray为一个整数 QByteArray buffer server gt read 8192 QByteArray q size buffer mid 0 2 int size q siz
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为按钮控件 Qt Widgets 样式表定义多种样式

    如何在一个样式表中为一种控件定义多种样式 这样以后开发人员就可以选择控件应该是什么样子的样式 例如 我需要定义两种样式QPushButton 用于普通按钮 左侧 和操作按钮 右侧 对于第一个按钮 我编写了以下样式 QPushButton b
  • 当选项卡到另一个组件位置时,QML 中相应的滚动

    我想做的是 如果我从TextField到另一个组件 aComboBoxwtv 我希望滚动能够适应这一点 当我认为这非常重要时 当我执行连续选项卡时 我会转到滚动视图显示的内容下方的控件 一个例子是 假设我在这里 now i do 2 tab
  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • Qt - 添加超链接到对话框

    有没有办法在 Qt 对话框中添加可点击的超链接 IE 它应该看起来像一个超链接 蓝色文本 当您单击它时 它应该在浏览器中打开该超链接 像这样的东西 Use QLabel setOpenExternalLinks bool 并在标签上设置文本
  • PyQt:在运行时向滚动区域添加小部件

    我试图在运行时通过按下按钮来添加新的小部件 在下面的示例中我使用标签 这里是例子 import sys from PyQt4 QtCore import from PyQt4 QtGui import class Widget QWidge
  • 使用 qt 创建和使用共享库

    我对共享库很陌生 所以我对如何创建 使用共享库有疑问 我正在使用 Qt Creator 和 qt 5 4 2 以及 Microsoft Visual C 11 0 编译器 在我的项目中 我需要创建一个 dll 它从外部库调用函数 有 h l
  • 暂停 python 脚本直到事件发生,而不挂起/阻止 GUI

    尝试使用 Kivy 从 PyQt 迁移 我什至无法想象解决方案 我有数千行代码 使用 Qt 的对话框进行文本输入 也就是说 当到达他们的代码行时 他们会 停止 脚本 直到按下 确定 按钮 以便他们可以返回文本输入 Kivy 没有该功能 因此
  • 通过信号/槽将 QVector 从工作线程传递到主线程

    目前 我在将 QVector 传递到线程之间时遇到一些麻烦 目前我有一个主线程 GUI Thread 和一个频繁发出 QVector 数组的工作线程 在向量内直接发出数据之前看起来不错 接收者是主线程中的一个槽 但该槽接收到的数据是乱码 这
  • 从 QWebEngineView 或 QWebEnginePage 中删除滚动条

    有没有办法删除滚动条QWebEngineView或者我可以以某种方式访问 它的 ScrollArea 吗 使用 webkit 就这么简单 WebView gt page gt setScrollBarPolicy Qt Vertical Q
  • Qt:使用 QObject::connect 指定多种连接类型

    我想知道是否可以指定多种连接类型 例如 我希望我的连接类型是排队连接和唯一连接 是否可以在一份声明中具体说明这一点 QObject connect ptrSender SIGNAL ptrReceiver SLOT Queued and u
  • Qt 覆盖小部件快捷方式(窗口快捷方式)

    我有一个 Qt 应用程序 其中在 Qt Designer 表单操作中定义了多个窗口快捷方式 这些快捷键效果很好 直到焦点位于处理相同组合的小部件上 覆盖我的窗口快捷键 时按下它们 我想要相反的行为 窗口快捷方式覆盖聚焦的小部件快捷方式 我尝
  • Row 和 RowLayout 有什么区别?

    这按预期工作Row 但不与RowLayout 为什么 两者有什么区别 ApplicationWindow title Testing width 640 height 480 RowLayout Row anchors fill paren
  • 如何禁用滚轮事件 QGraphicsView Qt C++ 上的滚动功能

    我有一个图形视图 并且我设置了自己的功能 以便在用户按下 Control 并单击鼠标时手动拖动滚动 我已经删除了滚动条 但鼠标滚轮仍然会滚动 甚至滚动到显示在图像中的图像qGraphicsView显示我的手拖动没有的空白 白色 空间 我怎样
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实

随机推荐

  • 电机矢量控制方法

    在工业控制领域 电动机是一个重要的研究方向 发电厂60 的能量都去驱动电动机来为人类服务 可见电机的控制在工业以及军事方面的重要性 电动机分为直流电机和交流电机 而交流电机包括同步交流电机和异步交流电机 同步电动机和异步电动机的区别在于 同
  • 跳出for循环

    跳出for循环有三种方式 1 continue 跳出当次循环 可继续进行下一个循环 function ceshi for var i 0 i lt 6 i if i 3 continue console log i ceshi 效果图 2
  • 如何设计管理员和用户登录界面C语言,管理员登录设计(第7节)

    本文实现管理员登录效果 当用户名和密码正确时 弹出登录成功提示 否则弹出用户名或密码错误提示 今天有以下三大学习任务 学习任务一 了解命名空间的定义 定义 namespace 空间名 类 引用 using 空间名 学习任务二 实现管理员登陆
  • 【micropython】SPI触摸屏开发

    背景 最近买了几块ESP32模块 看了下mircopython支持还不错 所以买了个SPI触摸屏试试水 记录一下使用过程 硬件相关 SPI触摸屏 使用2 4寸屏幕 常见淘宝均可买到 驱动为ILI9341 具体参数如下图 引脚描述 ESP32
  • C++中【字符串】与【整型】和【浮点型】转换攻略

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 C 算法刷题等过程中经常会遇到字符
  • 化工安全生产管理平台:融合重大危险源监控预警、可燃有毒气体检测报警、企业安全风险分区于一体

    产品概述 化工企业安全生产信息化管理平台 以实现化工企业安全生产数字化 信息化 智能化管理为目标 建设融合重大危险源监控预警管理 可燃有毒气体检测报警管理 企业安全风险分区管理 生产人员在岗在位管理和企业生产全流程管理于一体的安全生产信息化
  • 测试从业1到3年经验,常见软件测试工程师面试题总结

    前言 软件测试工程师 和开发工程师相比起来 虽然前期可能不会太深 但是涉及的面还是比较广的 前期面试实习生或者一年左右的岗位 问的也主要是一些基础性的问题比较多 涉及的知识主要有MySQL数据库的使用 Linux操作系统的使用 软件测试框架
  • SpringMVC文件的上传下载&JRebel的使用

    目录 前言 一 JRebel的使用 1 IDea内安装插件 2 激活 3 离线使用 使用JRebel的优势 二 文件上传与下载 1 导入pom依赖 2 配置文件上传解析器 3 数据表 4 配置文件 5 前端jsp页面 6 controlle
  • 【多目标跟踪MOT学习笔记】字节跳动ByteTrack论文研究(一):BYTE策略

    文章目录 前言 一 是什么ByteTrack 二 BYTE 1 BYTE method 概览 2 First Association 关联1 3 Second Association 关联2 4 Post Processing 后处理 4
  • 涅槃重生,BitKeep如何闯出千万用户新起点

    在全球 BitKeep钱包现在已经有超过千万用户在使用 当我得知这个数据的时候 有些惊讶 也有点意料之中 关注BitKeep这几年 真心看得出这家公司的发展之迅速 还记得2018年他们推出第一个版本时 小而美 简洁顺手 他们大胆且略显理想主
  • [非线性控制理论]4_反馈线性化_反步法

    非线性控制理论 1 Lyapunov直接方法 非线性控制理论 2 不变性原理 非线性控制理论 3 基础反馈稳定控制器设计 非线性控制理论 4 反馈线性化 反步法 非线性控制理论 5 自适应控制器 Adaptive controller 非线
  • 【操作系统 · 线程】介绍、分类、多线程

    线程 介绍 分类 多线程 一 介绍 1 进程与线程 2 多线程 3 线程的功能 二 线程分类 1 用户级线程 2 内核级线程 3 其他方案 三 多核 多线程 一 介绍 进程中有两个重要概念 资源所有权 执行 因这一区别 许多操作系统中出现了
  • ueditor1.5 新版ueditor设置字体大小文件所在位置

    ueditor src plugins font js文件 将想添加的字体大小设置即可 fontsize 10 11 12 14 16 18 20 24 36 72
  • 【HBZ分享】java之二叉堆排序实战代码

    废话不多说 直接上代码 注释都在代码中 利用大顶堆排序 最终数组从小到大 复制即用无需导包 package 大顶堆 import java lang reflect Array import java util Arrays public
  • 30天自制操作系统学习-第1天

    第一天 1 批处理文件 直接由DOS命令行解释执行的文件 通常后缀名为 bat或 cmd 2 镜像文件 img后缀的文件 可用于制作操作系统文件 一个3 5英寸的软盘容量为1440k 3 nask 作者自己制作的汇编代码编译器 代码与nas
  • Adobe Creative Suite 5.5 简体中文版

    http www itopdog cn graphic image web design software adobe creative suite html Adobe Creative Suite 5 5 简介 Adobe Creati
  • xml和javaBean实现互转

    最近遇到了调用接口需要xml报文传递 用传统最简单的方式就是我们string手动拼接报文传递 这样调用问题解决了 返回的数据问题没有得到解决 因为返回的也是xml报文 需要对其做一些转换操作 既然转换 直接在传递时通过简单的方式将报文序列化
  • Python 日志管理模块logging

    参考 link https www cnblogs com nancyzhu p 8551506 html 日志 日志是跟踪软件运行时所发生的事件的一种方法 软件开发者在代码中调用日志函数 表明发生了特定的事件 事件由描述性消息描述 该描述
  • ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法

    程序连接orarle报ORA 12505错误 一 异常 ORA 12505 TNS listener does not currently know of SID given in connect descriptor The Connec
  • VTK_python入门

    tk基本介绍 VTK 库的框架结构 vtkObject gt vtkSource gt vtkFilter gt vtkMapper gt vtkActor gt vtkRenderer 对象 介绍 vtkObject vtk库的基类 vt