Python/vtk - 在 vtkPolyData 对象中单独设置每个点的大小?

2024-04-21

我使用以下代码来填充点云:如何在vtk中以不同的颜色显示点云? https://stackoverflow.com/questions/7591204/how-to-display-point-cloud-in-vtk-in-different-colors

这些点是新西兰目前地震的长度、纬度和深度。

我想更改点大小,按第四个值缩放 -mag- 这是群中每次地震的震级数据。

我真的不熟悉 vtk 包装器,想知道是否有人可以指出我可以在哪一点上处理演员,并更改每个点的大小:

Code:

import vtk
import csv
import numpy


class Points_Maker(object):
    def __init__(self, fname):
        self.fname = fname
        self.points = []
        self.points_mag = []
        self.get_data()

    def get_data(self):
        reader = csv.reader(open(self.fname, "rb"))
        for row in reader:
            if "FID" in row[0]:
                pass
            else:
                longitude = (float(row[3]) - 174) * 10 #de-localises value
                latitude = (float(row[4]) + 41) * 10 #de-localises value
                depth = float(row[5])
                magnitude = float(row[6])
                point = [longitude, latitude, depth]
                point_and_mag = [[longitude, latitude, depth], magnitude]
                point = numpy.asarray(point)
                point_and_mag = numpy.asarray(point_and_mag)
                self.points.append(point)
                self.points_mag.append(point_and_mag)

class VtkPointCloud:

    def __init__(self, zMin=-0.0, zMax=100.0, maxNumPoints=1e6): #sets colou limits
        self.maxNumPoints = maxNumPoints
        self.vtkPolyData = vtk.vtkPolyData()
        self.clearPoints()
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInput(self.vtkPolyData)
        mapper.SetColorModeToDefault()
        mapper.SetScalarRange(zMin, zMax)
        mapper.SetScalarVisibility(1)
        self.vtkActor = vtk.vtkActor()
        self.vtkActor.SetMapper(mapper)

    def addPoint(self, point):
        mag = 10
        if self.vtkPoints.GetNumberOfPoints() < self.maxNumPoints:
            pointId = self.vtkPoints.InsertNextPoint(point[:])
            self.vtkDepth.InsertNextValue(point[2])
            self.vtkCells.InsertNextCell(1)
            self.vtkCells.InsertCellPoint(pointId)
        self.vtkCells.Modified()
        self.vtkPoints.Modified()
        self.vtkDepth.Modified()


    def clearPoints(self):
        self.vtkPoints = vtk.vtkPoints()
        self.vtkCells = vtk.vtkCellArray()
        self.vtkDepth = vtk.vtkDoubleArray()
        self.vtkDepth.SetName('DepthArray')
        self.vtkPolyData.SetPoints(self.vtkPoints)
        self.vtkPolyData.SetVerts(self.vtkCells)
        self.vtkPolyData.GetPointData().SetScalars(self.vtkDepth)
        self.vtkPolyData.GetPointData().SetActiveScalars('DepthArray')


def main():
    pm = Points_Maker("quake.csv")
    pointCloud = VtkPointCloud()
    for point_and_mag in pm.points_mag:
        mag = point_and_mag[1]
        point = point_and_mag[0]
        pointCloud.addPoint(point)
    renderer = vtk.vtkRenderer()
    renderer.AddActor(pointCloud.vtkActor)
    renderer.SetBackground(.2, .3, .3)  #colour
    renderer.ResetCamera()

    # Render Window
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)

    # Interactor
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)

    # Begin Interaction
    renderWindow.Render()
    renderWindowInteractor.Start()

if __name__ == '__main__':
    main()

point_and_mag 数据片段:

[[4.45699999999988, -5.540999999999983, 10.0391] 2.38]
[[3.9390000000000214, -5.606999999999971, 17.7148] 3.7352]
[[4.182999999999879, -5.519999999999996, 11.0938] 2.16]
[[3.9979999999999905, -5.390999999999977, 8.5713] 2.4826]
[[3.9560000000000173, -5.568000000000026, 12.1685] 3.5205]
[[4.41900000000004, -5.381, 15.1953] 2.1109]
[[4.507000000000119, -5.360999999999976, 14.3164] 2.5587]
[[3.973000000000013, -5.688999999999993, 14.1406] 2.7651]
[[4.139999999999873, -5.290000000000035, 10.9766] 2.6873]
[[7.182999999999993, -3.92000000000003, 11.6797] 2.5306]
[[4.07999999999987, -5.489999999999995, 17.4805] 5.7216]
[[4.113000000000113, -5.416000000000025, 15.0195] 2.8919]
[[3.7520000000000664, -6.462999999999965, 5.8203] 2.0667]
[[7.727999999999895, -6.178999999999988, 29.0234] 2.0115]

使用这个:http://www.vtk.org/Wiki/VTK/Examples/Python/GeometricObjects/Display/Point http://www.vtk.org/Wiki/VTK/Examples/Python/GeometricObjects/Display/Point

我已经弄清楚如何更改整个集合的大小,这让我怀疑点云是一个演员,而不是点云中点的每个实例:-

def addPoint(self, point, mag):
    if self.vtkPoints.GetNumberOfPoints() < self.maxNumPoints:
        pointId = self.vtkPoints.InsertNextPoint(point[:])
        self.vtkDepth.InsertNextValue(point[2])
        self.vtkCells.InsertNextCell(1)
        self.vtkCells.InsertCellPoint(pointId)
        self.vtkActor.GetProperty().SetPointSize(mag*10)
    self.vtkCells.Modified()
    self.vtkPoints.Modified()
    self.vtkDepth.Modified()
    self.vtkActor.Modified()

啊,我明白了。

我只需要有构造函数pointCloud = VtkPointCloud()在 for 循环中逐步遍历这些点,然后renderer.AddActor(pointCloud.vtkActor)在该循环步骤内。

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

Python/vtk - 在 vtkPolyData 对象中单独设置每个点的大小? 的相关文章

随机推荐

  • Oracle中如何检查所有字段是否唯一?

    Oracle中如何检查所有字段是否唯一 SELECT myColumn COUNT FROM myTable GROUP BY myColumn HAVING COUNT gt 1 如果出现次数大于 1 即它们不是唯一的 这将返回所有 my
  • Java 中的数据验证和扫描器

    我有一个关于数据验证和扫描仪的问题 下面的代码检查用户输入 除了整数之外的任何内容都是不允许的 并且要求用户重新输入一个值 我的问题是 只有当扫描仪打开时 代码才有效在 while 循环内声明 如果在外部声明扫描仪 则程序将无限执行 这是为
  • 如何在.net core项目中使用SignalR Core监听postgresql数据库?

    我正在开发 net core Web 应用程序 我想监听我的 PostgreSQL 数据库 如果桌面上有任何变化 我必须得到它 所以根据我的研究 我必须使用SignalR Core 我用 SignalR 做了一些示例应用程序 例如聊天应用程
  • pod init 获得未初始化的常量 ActiveSupport::XmlMini::IsolatedExecutionState (NameError)

    mac os 成功安装cocoapods 1 11 2 红宝石 v ruby 3 1 1p18 2022 02 18 修订版 53f5fc4236 x86 64 darwin21 宝石 v 3 3 8 但 exec pod init 收到错
  • django 管理中的多态行为

    问题 假设我有三个类A B和C 其中B是A的子类 C是B的子类 A lt B lt C 当我打开管理并列出所有 A 时 我看到所有 A B 和 C 但是 当我点击其中一个链接查看详细信息并编辑该特定 B 时 我只会看到 B 的字段 即使该实
  • 突出显示用户选择的文本片段

    我有一个 div with some text div 我需要突出显示用户选择的文本片段 我已经部分实现了这个 这是我的代码 http jsfiddle net Greatshock fy09jo8w 8 thisRespondHightl
  • 能否在上传 Azure CloudBlockBlob 的同时在其上设置元数据?

    我目前使用以下方式上传 CloudBlockBlob CloudBlockBlob UploadFromStreamAsync 然后我立即在上面设置了一堆用户元数据 问题是 我有一个事件网格事件 该事件在上传 blob 时触发 但事件处理程
  • 如何在多个 HTML 页面上播放背景音频?

    是否有解决方案可以让背景音频 音乐在网站上的多个页面上播放 而无需在每个页面加载时重新启动 该网站当前使用框架集 但我正在寻找替代方案 如果不让整个网站都 AJAX 我认为框架是唯一的方法 如果您需要的话 这里有一个关于制作 ajax 站点
  • JavaScript 多行字符串[重复]

    这个问题在这里已经有答案了 问题是 像在 PHP 中一样将多行字符串存储到变量中的 JavaScript 方法是什么 如果 多行字符串 是指包含换行符的字符串 则可以通过使用转义它们来编写这些字符串 n 对于换行符 var multilin
  • 如何从命令行将 Svelte 文件编译为 JavaScript?

    我是新来的Svelte https svelte dev 快速提问 Svelte 编译器有 CLI 吗 如何访问它 我知道 Svelte 有一个使用 rollup 的预配置设置 但不使用什么 用于构建应用程序 一切都很好 但我只需要 CLI
  • Sublime Text 2 在 Java 开发方面是否胜过 Eclipse [关闭]

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

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

    这个问题在这里已经有答案了 可能的重复 为什么 在列表上表现异常 https stackoverflow com questions 2347265 why does behave unexpectedly on lists 今天我发现了P
  • C++ 编译器会优化重复的函数调用吗?

    编译器 通常或特别 是否优化重复的函数调用 例如 考虑这种情况 struct foo member type m return type f const returns by value 函数定义在一个翻译单元中 return type f
  • 使用样式化组件设置滑块拇指样式

    我正在尝试使用 React 的样式组件来设置滑块的样式 但我不知道如何设置拇指的样式 我有一个看起来像这样的CSS faderInput webkit slider thumb webkit appearance none width 15
  • Javascript C++ 绑定?

    我有一些 C 代码想要公开给 Web 应用程序的客户端 理想情况下 我想为我的 C 类编写 Javascript 包装对象 以便我可以在客户端使用它们 这以前做过吗 有谁有链接来展示如何实现这一目标 有一个库可以将 C 代码转换为 java
  • 是否可以使用 JNI 在 C 或 C++ 中实现 Java 接口?

    假设一个 Java 库包含一个类 我们称它为Foo 该类包含一个构造函数和两个方法 constructor Foo returns a random int public int bar generates a random int x a
  • 泛型和(超级?)类型标记可以帮助构建类型安全的新闻聚合器吗?

    我有这个基本的News界面 interface News String getHeader String getText 和具体的类 如SportsNews and FinancialNews提供具体方法 例如getStockPrice g
  • 如何为DialogFragment设置主题

    有人可以解释一下为什么这个声明效果很好 setStyle DialogFragment STYLE NO TITLE android R style Theme Holo 并且下一个声明没有传递 setStyle DialogFragmen
  • Python/vtk - 在 vtkPolyData 对象中单独设置每个点的大小?

    我使用以下代码来填充点云 如何在vtk中以不同的颜色显示点云 https stackoverflow com questions 7591204 how to display point cloud in vtk in different