田园综合体建设网站加利弗设计公司

张小明 2026/1/11 16:11:00
田园综合体建设网站,加利弗设计公司,企业网站的维护,安徽建设工程网一#xff1a;主要的知识点 1、说明 本文只是教程内容的一小段#xff0c;因博客字数限制#xff0c;故进行拆分。主教程链接#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①MarchingCubes等值面重建的原理展示 二主要的知识点1、说明本文只是教程内容的一小段因博客字数限制故进行拆分。主教程链接vtk教程——逐行解析官网所有Python示例-CSDN博客2、知识点纪要本段代码主要涉及的有①MarchingCubes等值面重建的原理展示二代码及注释import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonCore import vtkFloatArray, vtkIdList, vtkPoints from vtkmodules.vtkCommonDataModel import vtkUnstructuredGrid, VTK_HEXAHEDRON from vtkmodules.vtkCommonTransforms import vtkTransform from vtkmodules.vtkFiltersCore import vtkContourFilter, vtkGlyph3D, vtkThresholdPoints, vtkTubeFilter from vtkmodules.vtkFiltersCore import vtkExtractEdges from vtkmodules.vtkFiltersGeneral import vtkShrinkPolyData, vtkTransformPolyDataFilter from vtkmodules.vtkFiltersSources import ( vtkCubeSource, vtkSphereSource ) from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) from vtkmodules.vtkRenderingFreeType import vtkVectorText Scalars vtkFloatArray() def main(): cases [case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10, case11, case12, case13, case14] colors vtkNamedColors() rotation 0 renderers list() gridSize ((len(cases) 3) // 4) * 4 renWin vtkRenderWindow() renWin.SetSize(640, 480) iren vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) for i in range(0, 16): renderer vtkRenderer() renderers.append(renderer) renderers[i].SetBackground(colors.GetColor3d(slate_grey)) renWin.AddRenderer(renderer) for i in range(0, len(cases)): Scalars vtkFloatArray() Scalars.InsertNextValue(1.0) Scalars.InsertNextValue(0.0) Scalars.InsertNextValue(0.0) Scalars.InsertNextValue(1.0) Scalars.InsertNextValue(0.0) Scalars.InsertNextValue(0.0) Scalars.InsertNextValue(0.0) Scalars.InsertNextValue(0.0) Points vtkPoints() Points.InsertNextPoint(0, 0, 0) Points.InsertNextPoint(1, 0, 0) Points.InsertNextPoint(1, 1, 0) Points.InsertNextPoint(0, 1, 0) Points.InsertNextPoint(0, 0, 1) Points.InsertNextPoint(1, 0, 1) Points.InsertNextPoint(1, 1, 1) Points.InsertNextPoint(0, 1, 1) Ids vtkIdList() Ids.InsertNextId(0) Ids.InsertNextId(1) Ids.InsertNextId(2) Ids.InsertNextId(3) Ids.InsertNextId(4) Ids.InsertNextId(5) Ids.InsertNextId(6) Ids.InsertNextId(7) Grid vtkUnstructuredGrid() 第一个参数插入10个单元格 第二个参数每个单元格插入10个点 但是在这个按理中每个立方体只有一个单元格 101 每个单元格只有8个点 10 8 示例代码很明显是分配空间 所需空间 Grid.Allocate(10, 10) Grid.InsertNextCell(VTK_HEXAHEDRON, Ids) Grid.SetPoints(Points) Grid.GetPointData().SetScalars(Scalars) marching vtkContourFilter() marching.SetInputData(Grid) marching.SetValue(0, 0.5) marching.Update() # 提取经由marching找到的等值面三角网格面的边缘 triangleEdges vtkExtractEdges() triangleEdges.SetInputConnection(marching.GetOutputPort()) # 将提取的边缘变粗方便可视化 triangleEdgeTubes vtkTubeFilter() triangleEdgeTubes.SetInputConnection(triangleEdges.GetOutputPort()) triangleEdgeTubes.SetRadius(0.005) triangleEdgeTubes.SetNumberOfSides(6) triangleEdgeTubes.UseDefaultNormalOn() # 使用默认法线 triangleEdgeTubes.SetDefaultNormal(.577, .577, .577) triangleEdgeMapper vtkPolyDataMapper() triangleEdgeMapper.SetInputConnection(triangleEdgeTubes.GetOutputPort()) triangleEdgeMapper.ScalarVisibilityOff() triangleEdgeActor vtkActor() triangleEdgeActor.SetMapper(triangleEdgeMapper) triangleEdgeActor.GetProperty().SetDiffuseColor(colors.GetColor3d(lamp_black)) triangleEdgeActor.GetProperty().SetSpecular(.4) # 设置镜面反射 triangleEdgeActor.GetProperty().SetSpecularPower(10) # 设置镜面强度 aShrikner vtkShrinkPolyData() aShrikner.SetInputConnection(marching.GetOutputPort()) aShrikner.SetShrinkFactor(1.0) aMapper vtkPolyDataMapper() aMapper.ScalarVisibilityOff() aMapper.SetInputConnection(aShrikner.GetOutputPort()) Triangles vtkActor() Triangles.SetMapper(aMapper) Triangles.GetProperty().SetDiffuseColor(colors.GetColor3d(banana)) Triangles.GetProperty().SetOpacity(.6) # 整体的立方体的构建 CubeModel vtkCubeSource() CubeModel.SetCenter(.5, .5, .5) Edges vtkExtractEdges() Edges.SetInputConnection(CubeModel.GetOutputPort()) Tubes vtkTubeFilter() Tubes.SetInputConnection(Edges.GetOutputPort()) Tubes.SetRadius(.01) Tubes.SetNumberOfSides(6) Tubes.UseDefaultNormalOn() Tubes.SetDefaultNormal(.577, .577, .577) TubeMapper vtkPolyDataMapper() TubeMapper.SetInputConnection(Tubes.GetOutputPort()) CubeEdges vtkActor() CubeEdges.SetMapper(TubeMapper) CubeEdges.GetProperty().SetDiffuseColor( colors.GetColor3d(khaki)) CubeEdges.GetProperty().SetSpecular(.4) CubeEdges.GetProperty().SetSpecularPower(10) # 新建球体用来表示marching cubes哪里是1哪里是0 sphere vtkSphereSource() sphere.SetRadius(0.04) sphere.SetPhiResolution(20) sphere.SetThetaResolution(20) # 移除掉grid中点的scalar ThresholdIn vtkThresholdPoints() ThresholdIn.SetInputData(Grid) ThresholdIn.ThresholdByUpper(.5) # 只保留标量值小于或等于 0.5 的所有点 Vertices vtkGlyph3D() Vertices.SetInputConnection(ThresholdIn.GetOutputPort()) Vertices.SetSourceConnection(sphere.GetOutputPort()) SphereMapper vtkPolyDataMapper() SphereMapper.SetInputConnection(Vertices.GetOutputPort()) SphereMapper.ScalarVisibilityOff() CubeVertices vtkActor() CubeVertices.SetMapper(SphereMapper) CubeVertices.GetProperty().SetDiffuseColor( colors.GetColor3d(tomato)) caseLabel vtkVectorText() aLabelTransform vtkTransform() aLabelTransform.Identity() aLabelTransform.Translate(-0.2, 0, 1.25) aLabelTransform.Scale(.05, .05, .05) # 将label这个数据移动到新的位置 labelTransform vtkTransformPolyDataFilter() labelTransform.SetTransform(aLabelTransform) labelTransform.SetInputConnection(caseLabel.GetOutputPort()) labelMapper vtkPolyDataMapper() labelMapper.SetInputConnection(labelTransform.GetOutputPort()) labelActor vtkActor() labelActor.SetMapper(labelMapper) # 设置一个基座用来放置grid baseModel vtkCubeSource() baseModel.SetXLength(1.5) baseModel.SetYLength(0.01) baseModel.SetZLength(1.5) baseMapper vtkPolyDataMapper() baseMapper.SetInputConnection(baseModel.GetOutputPort()) base vtkActor() base.SetMapper(baseMapper) base.SetPosition(.5, -0.09, .5) 在这里完成对于Scalars标量值的更新 cases[i](Scalars, caseLabel, 1, 0) Grid对象进行数据更新 为什么Scalars这个对象的更新能够影响到已经构建好了的Grid里面的标量的值 Grid.GetPointData().SetScalars(Scalars) 这一行没有复制数据只是建立起了一个引用 SetScalars() 的作用建立联系而非复制数据 你可以把 Scalars 想象成一个装满水的水桶而 Grid 就像一个需要水的洒水器。 Grid.GetPointData().SetScalars(Scalars) 这句话的作用是 “把洒水器的进水管接到这个水桶上。” 这行代码执行之后Grid洒水器就知道去哪里找它的水源Scalars。它本身没有自己的水它只是引用着 Scalars 这个水桶里的数据。 当你循环中调用 caseX(Scalars, ...) 函数时你实际上是在 “直接往这个水桶里倒新水。” 因为 Grid 的进水管一直连接着同一个水桶所以当你改变 Scalars 里数据的时候Grid 立即就能“看到”这些变化。 Grid.Modified() 的作用就是 “告诉洒水器嘿水桶里的水换了记得重新检查一下” 如果没有这句通知洒水器可能懒得去检查继续用它之前的水。有了这句通知它就会去检查水桶发现水变了然后把新数据传递给下游的过滤器vtkContourFilter Grid.Modified() renderers[i].AddActor(triangleEdgeActor) renderers[i].AddActor(base) renderers[i].AddActor(labelActor) renderers[i].AddActor(CubeEdges) renderers[i].AddActor(CubeVertices) renderers[i].AddActor(Triangles) renderers[i].GetActiveCamera().Azimuth(30) renderers[i].GetActiveCamera().Elevation(20) renderers[i].ResetCamera() renderers[i].ResetCameraClippingRange() 原本的示例代码是这样写的 if i 0: renderers[i].SetActiveCamera(renderers[0].GetActiveCamera()) 这行代码的意思是所有的render都使用索引为0的render的那个相机 这就意味着窗口的所有render在鼠标进行操作时因为是一个相机所有的render都会一起变化 rendererSize 300 xGridDimensions 4 yGridDimensions (len(cases) - 1) // 4 1 print(Grid dimensions, (x, y): ({:d}, {:d}).format(xGridDimensions, yGridDimensions)) renWin.SetSize( rendererSize * xGridDimensions, rendererSize * yGridDimensions) renWin.SetWindowName(MarchingCases) vtk的惰性执行哪怕前面已经将render塞入到renderwindow中这里再进行更改也是可以的 for row in range(0, yGridDimensions): for col in range(0, xGridDimensions): index row * xGridDimensions col # (xmin, ymin, xmax, ymax) viewport [ float(col) / xGridDimensions, float(yGridDimensions - (row 1)) / yGridDimensions, float(col 1) / xGridDimensions, float(yGridDimensions - row) / yGridDimensions] renderers[index].SetViewport(viewport) iren.Initialize() renWin.Render() iren.Start() def case0(scalars: vtkFloatArray, caseLabel: vtkVectorText, IN: float, OUT: float): # SetValue和InsertValue这两种写法都可以 scalars.SetValue(0, OUT) scalars.SetValue(1, OUT) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, OUT) scalars.InsertValue(5, OUT) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 0 - 00000000) else: caseLabel.SetText(Case 0c - 11111111) def case1(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, OUT) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, OUT) scalars.InsertValue(5, OUT) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 1 - 00000001) else: caseLabel.SetText(Case 1c - 11111110) def case2(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, IN) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, OUT) scalars.InsertValue(5, OUT) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 2 - 00000011) else: caseLabel.SetText(Case 2c - 11111100) def case3(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, OUT) scalars.InsertValue(2, IN) scalars.InsertValue(3, OUT) scalars.InsertValue(4, OUT) scalars.InsertValue(5, OUT) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 3 - 00000101) else: caseLabel.SetText(Case 3c - 11111010) def case4(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, OUT) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, OUT) scalars.InsertValue(5, OUT) scalars.InsertValue(6, IN) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 4 - 01000001) else: caseLabel.SetText(Case 4c - 10111110) def case5(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, OUT) scalars.InsertValue(1, IN) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, IN) scalars.InsertValue(5, IN) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 5 - 00110010) else: caseLabel.SetText(Case 5c - 11001101) def case6(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, OUT) scalars.InsertValue(1, IN) scalars.InsertValue(2, OUT) scalars.InsertValue(3, IN) scalars.InsertValue(4, IN) scalars.InsertValue(5, OUT) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 6 - 00011010) else: caseLabel.SetText(Case 6c - 11100101) def case7(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, IN) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, OUT) scalars.InsertValue(5, OUT) scalars.InsertValue(6, IN) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 7 - 01000011) else: caseLabel.SetText(Case 7c - 10111100) def case8(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, IN) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, IN) scalars.InsertValue(5, IN) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 8 - 00110011) else: caseLabel.SetText(Case 8c - 11001100) def case9(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, OUT) scalars.InsertValue(1, IN) scalars.InsertValue(2, IN) scalars.InsertValue(3, IN) scalars.InsertValue(4, OUT) scalars.InsertValue(5, OUT) scalars.InsertValue(6, IN) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 9 - 01001110) else: caseLabel.SetText(Case 9c - 10110001) def case10(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, OUT) scalars.InsertValue(2, OUT) scalars.InsertValue(3, IN) scalars.InsertValue(4, OUT) scalars.InsertValue(5, IN) scalars.InsertValue(6, IN) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 10 - 01101001) else: caseLabel.SetText(Case 10c - 10010110) def case11(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, OUT) scalars.InsertValue(2, OUT) scalars.InsertValue(3, OUT) scalars.InsertValue(4, IN) scalars.InsertValue(5, IN) scalars.InsertValue(6, IN) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 11 - 01110001) else: caseLabel.SetText(Case 11c - 10001110) def case12(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, OUT) scalars.InsertValue(1, IN) scalars.InsertValue(2, OUT) scalars.InsertValue(3, IN) scalars.InsertValue(4, IN) scalars.InsertValue(5, IN) scalars.InsertValue(6, OUT) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 12 - 00111010) else: caseLabel.SetText(Case 12c - 11000101) def case13(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, OUT) scalars.InsertValue(1, IN) scalars.InsertValue(2, OUT) scalars.InsertValue(3, IN) scalars.InsertValue(4, IN) scalars.InsertValue(5, OUT) scalars.InsertValue(6, IN) scalars.InsertValue(7, OUT) if IN 1: caseLabel.SetText(Case 13 - 01011010) else: caseLabel.SetText(Case 13c - 10100101) def case14(scalars, caseLabel, IN, OUT): scalars.InsertValue(0, IN) scalars.InsertValue(1, OUT) scalars.InsertValue(2, IN) scalars.InsertValue(3, IN) scalars.InsertValue(4, OUT) scalars.InsertValue(5, IN) scalars.InsertValue(6, IN) scalars.InsertValue(7, IN) if IN 1: caseLabel.SetText(Case 14 - 11101101) else: caseLabel.SetText(Case 14c - 00010010) if __name__ __main__: main()
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

河南开封网站建设做网站被骗预付款怎么办

你是不是经常在抖音上看到精彩视频想要保存,却苦于水印破坏画面美感?🤔 别担心,今天我要为你介绍一款超实用的抖音无水印下载神器,让你轻松收藏每一个心动瞬间! 【免费下载链接】douyin_downloader 抖音短视…

张小明 2026/1/7 4:13:28 网站建设

在哪个网站做劳动用工备案做网站 免费字体

终极指南:3步解决《环世界》模组冲突的智能方案 【免费下载链接】RimSort 项目地址: https://gitcode.com/gh_mirrors/ri/RimSort 你是否曾经花费数小时调整模组顺序,却在游戏启动时看到令人沮丧的崩溃提示?当你的模组列表超过100个时…

张小明 2026/1/8 6:54:25 网站建设

蚌埠市做网站单页营销型网站建设

第一章:PHP边缘计算与机器学习部署的融合趋势随着物联网设备和实时数据处理需求的快速增长,PHP作为传统Web开发语言正逐步探索在边缘计算场景中的新定位。尽管PHP并非原生为高性能计算设计,但通过与轻量级机器学习推理引擎结合,其…

张小明 2026/1/7 4:13:31 网站建设

做网站竞争大吗网建是什么

跨境电商多语言客服压力大?Anything-LLM统一应答引擎 在跨境电商的日常运营中,一个再熟悉不过的场景是:凌晨三点,来自德国客户的邮件询问“退货是否包含运费补偿”,而客服团队还在时差中沉睡;同一时间&…

张小明 2026/1/8 7:14:02 网站建设

网站开发过程的基本环节重庆建设工程造价管理协会

RoslynPad终极指南:快速上手的跨平台C#代码实验神器 【免费下载链接】roslynpad 项目地址: https://gitcode.com/gh_mirrors/ros/roslynpad 在C#开发领域,RoslynPad是一个革命性的跨平台代码编辑和运行环境,它基于强大的Roslyn编译器…

张小明 2026/1/8 9:14:30 网站建设

用网站做CAN总线通信好吗湖南公众信息网官网

加密签名实战指南:从零掌握安全认证实现方法 【免费下载链接】crypto-js 项目地址: https://gitcode.com/gh_mirrors/cry/crypto-js 在日常开发中,你是否遇到过这些问题:用户身份如何安全验证?API请求如何防止被篡改&…

张小明 2026/1/8 8:43:05 网站建设