VTK交互之拾取

VTK: 拾取(点的拾取、线的拾取、Actor的拾取、坐标转换) 响应鼠标事件时:转换坐标、拾取点、或者ActorQt5.12.7vtk-9.2首先得理解VTK中的坐标系。这行代码可以获取交互器(vtkRenderWindowInteractor)接收到的最近一次事件发生的位置。它返回的是显示坐标系(VTK_DISPLAY)下的坐标。 阅读详情

选择拾取

  选择拾取是人机交互过程的一个重要功能。VTK中定义了多个拾取功能的类,所有拾取类都继承自vtkAbstractPicker类,继承关系如下:

这里写图片描述

1. vtkAbstractPicker

  该类是一个抽象基类,为它的具体的子类定义了最基本的API,最基本的功能是返回拾取位置的x-y-z 世界坐标系统的坐标值(pick自身是在屏幕坐标中进行定义的) 。
  类定义了一个纯虚函数Pick(),它的作用是给定一个选择点(屏幕坐标系统里的,以像素为单位)以及一个Renderer,然后通过调用GetPickPosition()方法,生成世界坐标系统的坐标值。
Pick()函数的原型如下:

virtual int Pick (double selectionX, double selectionY, double selectionZ, vtkRenderer *renderer)

   通常都把selectionZ设为0,与Renderer相关联的actor就是拾取的对象范围。在拾取过程中vtkPicker会触发一些事件:1、StartPickEvent, 2、PickEvent, 3、EndPickEvent。当something被拾取的时候,并且在所有的picking申请者已经通过测试,1/2/3事件就会在picking之前调用。注意:在pick的过程中,vtkProp的PickEvent事件会在vtkPicker的PickEvent之前被调用。 
   vtkAbstractPicker以及它的子类都不能拾取”拒绝拾取”的Prop(也就是该Prop通过调用自身的PickableOff()方法)和完全透明的Prop(即prop->GetProperty()->SetOpacity(0))。
  Picker可以分为两类,分别是用几何方法拾取(典型的例子是光线投射)和基于硬件拾取。几何方法拾取能获取的信息较多同时也较慢,而基于硬件的拾取拾取速度快,但返回的信息最少。几何方法拾取主要的类有:vtkPicker, vtkCellPicker和vtkPointPicker。基于硬件拾取的类有:vtkWorldPointPicker和vtkPropPicker。vtkAbstractPicker有两个直接子类:vtkWorldPointPicker和vtkAbstractPropPicker。

2. vtkWorldPointPicker

  vtkWorldPointPicker是基于硬件的拾取,它返回与屏幕坐标(x, y, z)相对应的世界坐标点。这个类不能拾取Actor和/或Mapper,它只是简单地确定世界坐标上的坐标值。这个类不调用PickMethod()事件,只能调用StartPickEvent()和EndPickMethod()两个事件。

3. vtkPropPicker

   vtkPropPicker是基于图形硬件拾取一个Actor/Prop实例,速度比vtkCellPicker/vtkPointPicker快。这个类在世界坐标系统中判定Actor/Prop和拾取位置,对于点和单元的ID则不作判定。

4. vtkPicker

  vtkPicker用于拾取vtkProp3D实例,它通过发射一条光线到图形窗口中,并与Actor的线框(Bounding box)相交,光线是从窗口坐标系统中拾取的一点到相机所在的位置的连线。因为光线可能会与多个Actor的线框相交,所以可能会返回多个vtkProp3D的实例。vtkPicker返回的是与光线相交的Prop实例的一个列表、世界坐标系统中的拾取坐标以及最靠近相机的Prop和Mapper实例。所谓的最靠近相机,是指该Prop线框中心点在光线上的投影最靠近相机的那个Prop实例。vtkPicker速度相对较快,可用于快速拾取几何对象。但如果想返回拾取的点或者单元的话,得用它的子类vtkCellPicker和vtkPointPicker vtkPicker里其中有一个方法:virtual void SetTolerance(double)—-是设置容差。

5. vtkPointPicker

  vtkPointPicker是vtkPicker的子类,它返回选择点的ID以及坐标。它也是通过发射光线与Actor相交而拾取对象的,除了返回坐标值,Actor和Mapper,它也返回在指定容差内沿着光线,最靠近光线的那个点的ID。vtkPointPicker::GetPointId()可以获取点的ID号。
  vtkPointPicker不能单一拾取,其速度比vtkPicker慢,但比vtkCellPicker要快。

6. vtkCellPicker

  vtkCellPicker是vtkPicker的子类,它返回选择单元的ID以及坐标。它也是通过发射光线与Actor相交而拾取对象的,除了返回坐标值,Actor和Mapper,它也返回在指定容差内沿着光线,最靠近光线的那个单元的ID。vtkPointPicker::GetCellId()可以获取单元的ID号。vtkCellPicker可以单一拾取,其速度是所有Picker中最慢的,当然,提供的信息也是最丰富的。

示例演示

CMakeLists.txt文件代码如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(PropPickerExample)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(PropPickerExample    PropPickerExample.cpp)
TARGET_LINK_LIBRARIES(PropPickerExample  ${VTK_LIBRARIES})

PropPickerExample.cpp文件代码如下:

#include <vtkSmartPointer.h>
#include <vtkMath.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkSphereSource.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkObjectFactory.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkPropPicker.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>

// Handle mouse events
class PropPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
    static PropPickerInteractorStyle* New();
    vtkTypeMacro(PropPickerInteractorStyle, vtkInteractorStyleTrackballCamera);

    PropPickerInteractorStyle()
    {
        LastPickedActor = NULL;
        LastPickedProperty = vtkProperty::New();
    }
    virtual ~PropPickerInteractorStyle()
    {
        LastPickedProperty->Delete();
    }
    virtual void OnLeftButtonDown()
    {
        int* clickPos = this->GetInteractor()->GetEventPosition();

        // Pick from this location.
        vtkSmartPointer<vtkPropPicker>  picker =
            vtkSmartPointer<vtkPropPicker>::New();
        picker->Pick(clickPos[0], clickPos[1], 0, this->GetDefaultRenderer());

        double* pos = picker->GetPickPosition();
        // If we picked something before, reset its property
        if (this->LastPickedActor)
        {
            this->LastPickedActor->GetProperty()->DeepCopy(this->LastPickedProperty);
        }
        this->LastPickedActor = picker->GetActor();
        if (this->LastPickedActor)
        {
            // Save the property of the picked actor so that we can restore it next time
            this->LastPickedProperty->DeepCopy(this->LastPickedActor->GetProperty());
            // Highlight the picked actor by changing its properties
            this->LastPickedActor->GetProperty()->SetColor(1.0, 0.0, 0.0);
            this->LastPickedActor->GetProperty()->SetDiffuse(1.0);
            this->LastPickedActor->GetProperty()->SetSpecular(0.0);
        }

        // Forward events
        vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
    }

private:
    vtkActor    *LastPickedActor;
    vtkProperty *LastPickedProperty;
};

vtkStandardNewMacro(PropPickerInteractorStyle);

int main(int argc, char *argv[])
{
    int numberOfSpheres = 10;
    if (argc > 1)
    {
        numberOfSpheres = atoi(argv[1]);
    }
    // A renderer and render window
    vtkSmartPointer<vtkRenderer> renderer =
        vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow =
        vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->Render();
    renderWindow->SetWindowName("PropPicker");
    renderWindow->AddRenderer ( renderer );

    // An interactor
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow ( renderWindow );

    // Set the custom type to use for interaction.
    vtkSmartPointer<PropPickerInteractorStyle> style =
        vtkSmartPointer<PropPickerInteractorStyle>::New();
    style->SetDefaultRenderer(renderer);

    renderWindowInteractor->SetInteractorStyle( style );

    for (int i = 0; i < numberOfSpheres; ++i)
    {
        vtkSmartPointer<vtkSphereSource> source =
            vtkSmartPointer<vtkSphereSource>::New();
        double x, y, z, radius;
        x = vtkMath::Random(-5,5);
        y = vtkMath::Random(-5,5);
        z = vtkMath::Random(-5,5);
        radius = vtkMath::Random(.5, 1.0);
        source->SetRadius(radius);
        source->SetCenter(x, y, z);
        source->SetPhiResolution(11);
        source->SetThetaResolution(21);
        vtkSmartPointer<vtkPolyDataMapper> mapper =
            vtkSmartPointer<vtkPolyDataMapper>::New();
        mapper->SetInputConnection ( source->GetOutputPort());
        vtkSmartPointer<vtkActor> actor =
            vtkSmartPointer<vtkActor>::New();
        actor->SetMapper ( mapper );
        double r, g, b;
        r = vtkMath::Random(.4, 1.0);
        g = vtkMath::Random(.4, 1.0);
        b = vtkMath::Random(.4, 1.0);
        actor->GetProperty()->SetDiffuseColor(r, g, b);
        actor->GetProperty()->SetDiffuse(.8);
        actor->GetProperty()->SetSpecular(.5);
        actor->GetProperty()->SetSpecularColor(1.0,1.0,1.0);
        actor->GetProperty()->SetSpecularPower(30.0);
        renderer->AddActor ( actor );
    }

    renderer->SetBackground ( 1.0, 1.0, 1.0 );

    // Render and interact
    renderWindow->Render();
    renderWindowInteractor->Initialize();
    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}

运行结果:

这里写图片描述

vtk实现 actor 选中、平移、旋转的 鼠标交互 想实现的效果:多个actor,选中某个actor。然后鼠标控制平移、旋转。 设计:平移、和旋转 先选中某个轴向X Y Z。然后将鼠标的移动映射为 某个轴向的transform。 代码实现方法: vtkInteractorStyleTrackballCamera 重载鼠标消息,picker选中actor,然后actor - rotation 。 virtual void OnLeftButtonDown() { int* clickPos ... 阅读详情

相关推荐

VTK修炼之道79:交互与拾取_单位拾取

1.单位拾取 示例代码: #include VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkInteractionStyle) VTK_MODULE_INIT(vtkRenderingFreeType) #include #include #include #include #include #include

沈春旭的博客 5223

VTK笔记——拾取器Picker

拾取是可视化应用程序中常见的一种功能。拾取主要是用于选择数据和actor或者获取底层的数据值,比如说,拾取点,拾取actor,拾取cell等。

Andy的专栏 1万+

VTK修炼之道78:交互与拾取_点拾取

1.拾取 选择拾取是人机交互过程的一个重要功能。 一个最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时需要用鼠标来选择所要控制的角色,这就要用到拾取功能。 另外,在某些三维图形的编辑软件中,经常需要编辑其中的一个点、一个面片或者一个局部区域,这也需要通过拾取功能来完成。 VTK中定义了多个拾取功能的类,具体的继承关系如下: VTK中所有的拾取类都继承自vt

沈春旭的博客 1万+

VTK笔记——拾取器 Picker 汇总

简单的说,拾取器可分两类: 一类是基于硬件拾取,如vtkPropPicker及其子类、vtkAreaPicker及子类 另一类是基于几何拾取,如vtkPicker和它的子类 硬件拾取的优点是快速,但获取信息有限 几何拾取则获得的信息多,但速度相对要慢一些使用硬件拾取的策略来确定所拾取的vtkProp对象,包括拾取点的世界坐标。它通常比vtkAbstractPropPicker的其它子类速度要快,但它不能返回所拾取对象的详细信息。博文:vtk 一个 Randerer 多个 Actor 独立操作的问题 vtkP

q610098308的专栏 2898

vtkPropPicker拾取功能

拾取一个对象,拾取的是这个对象所在的actor,所以如果想让不同的对象分开被拾取,一个对象就要创建一个actor。 示例代码功能 1 拾取到一个对象,先保存原有属性,把这个被拾取的对象设置成红色 2 拾取下一个对象,恢复上一个被拾取对象本来的颜色,对被拾取对象执行步骤1 代码 #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOp...

C++ 爱好者 make_it_simple888 3087

VTK三维纹理映射体绘制:原理、实现与交互拾取

体绘制是医学影像可视化和科学计算可视化的核心技术之一,它通过将三维体数据视为半透明介质,实现立体感与半透明叠加的渲染效果。三维纹理映射作为经典体绘制方案,利用GPU纹理采样硬件完成重采样与混合,既保留高质量视觉反馈,又比逐像素采样效率更高,成为许多医学工作站和科研项目的幕后功臣。VTK作为开源可视化库,提供从数据读取、传输函数配置到渲染交互的完整管线,并支持Python/C++跨语言环境。从基础原理出发,结合DICOM数据预处理、颜色与不透明度传输函数调优、渲染性能优化以及鼠标坐标拾取等工程实践,可以系统掌

weixin_29038155的博客 304

VTK交互与拾取

VTK交互与拾取

weixin_37603532的博客 339

vtk拾取例子,很有参考价值

关于vtk中使用mouse进行拾取的实例,很有参考价值

VTK:交互与拾取——从原理到实战:构建自定义点拾取交互器

本文深入探讨了VTK中的交互与拾取机制,重点解析了点拾取技术的原理与实现。通过构建自定义点拾取交互器的实战案例,详细介绍了从屏幕坐标到3D空间的转换方法、vtkPointPicker的工作流程以及常见问题的解决方案,帮助开发者掌握精准的点选择功能开发技巧。

weixin_29698641的博客 72

2026中银杯区块链赛项备赛全攻略:从任务书拆解到高分技巧

区块链技术正从概念走向工程化落地,其核心价值在于通过分布式账本、智能合约与共识机制,构建可信、透明、可追溯的业务协作网络。在供应链溯源、存证、资产流转等场景中,区块链应用已从单一技术验证转向完整业务系统交付,这对开发者的综合能力提出了更高要求。对于职业院校技能大赛而言,选手不仅需要掌握联盟链底层搭建、Solidity合约开发、前后端应用联调等技术,还需具备规范交付与团队协作的工程素养。围绕2026年中银杯湖北省职业院校技能大赛区块链技术应用赛项,本文深入拆解任务书模块与评分逻辑,梳理底层链搭建、智能合约开发

weixin_27960253的博客 333

SAP ABAP开发避坑:BAPI_MATVAL_PRICE_CHANGE调用报‘估价未维护’的完整解决流程

本文深入解析SAP ABAP开发中调用BAPI_MATVAL_PRICE_CHANGE函数时遇到的'估价未维护'错误,提供从基础配置检查到CKML_PRICE_SEND表维护的完整解决方案。通过实战案例和代码示例,帮助开发者快速定位问题并实现批量价格更新的自动化处理,提升开发效率。

weixin_28705087的博客 427

VTK:交互与拾取——点拾取

1.拾取 拾取最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时候需要用鼠标来选择所要控制的角色,这时候要用到拾取功能。 另外,在某些三维图形图形的编译软件中,经常需要编辑其中的一个点,一个片面或者一个局部区域,这也需要通过拾取功能来完成。 多个拾取功能: VTK中所有的拾取类都继承自vtkAbstractPicker类,在这些类的基础上可以实现非常复杂的功能。 2.点拾取 完成点拾取功能的类是vtkPointPicker。 vtk中的消息是通过vtkRenderWindowIntera

m0_45306991的博客 5211

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 728

VTK 三维模型的简单拾取交互

vtk 三维模型拾取交互

qhjian的博客 1322

STM32 FDCAN热插拔恢复机制与自动重发功能优化

本文深入分析了STM32 FDCAN在热插拔场景下触发bus-off状态导致通讯中断的根本原因,指出自动重发功能是问题关键。通过禁用自动重发、配置硬件自动恢复机制及优化总线参数,实现了FDCAN热插拔后的100%稳定恢复,为工业应用提供了可靠的CAN总线解决方案。

ice55的博客 685

Python反爬实战|动态渲染+高可用IP代理集群,稳定爬取京东/淘宝10万+商品数据

做Python电商爬虫的同学,应该都对京东、淘宝的反爬机制深有体会——这两个平台的反爬体系,堪称国内网站的天花板,远比普通资讯、政务网站的反爬严格十倍不止。用requests库请求商品列表,返回的永远是只有骨架的空HTML,商品标题、价格、销量全是前端JS异步加载,抓包分析接口发现参数全是加密的signtoken,解密成本无限高;用selenium开无头浏览器爬取,刚爬3-5页就触发风控,页面直接返回403,IP被封禁,甚至连Cookie都直接失效;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1585

VTK_Learning_交互与拾取_单位拾取

1.单位拾取 示例代码: #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkInteractionStyle) VTK_MODULE_INIT(vtkRenderingFreeType) #include <vtkSmartPointer.h> #inc...

weixin_38293453的博客 859

基于Java+SpringBoot+微信小程序实现奶茶点单系统

再不用担心逢年过节的第一杯奶茶有没有人送了,制作一个奶茶点单系统自己当店主,开怀畅饮,一劳永逸。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

VTK:交互与拾取——单位拾取

1.单位拾取 下面的代码 #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2) VTK_MODULE_INIT(vtkInteractionStyle) VTK_MODULE_INIT(vtkRenderingFreeType) #include <vtkSmartPointer.h> #include <vtkSphereSource.h> #include <vtkPolyDataMappe

m0_45306991的博客 844

PMP--二模--解题--161-170

A:邀请团队成员在下一次回顾中分享经验。B:请求发起人增加具有所需经验的团队成员。C:在团队内计划知识共享会议。D:请求发起人为团队提供培训课程。A。

stqer的博客 1270

【乐企文件生成工程】乐企文件生成支持所有特定要素类型发票

【代码】【乐企文件】乐企文件生成最新更新!!!

九七的博客 850

VTK进阶学习第七阶段:体绘制与交互拾取核心技术解析

三维可视化中,VTK作为开源图形处理库,其管线架构与数据流模型是核心基础。理解数据对象与过程对象的连接机制,掌握惰性求值原理,能有效提升渲染效率与交互响应。体绘制通过传递函数将标量场映射为颜色与透明度,实现内部结构展示;交互拾取则依赖观察者模式与Picker组件,完成点选与框选操作。这些技术广泛应用于医学影像重建、CFD后处理及地质建模等场景。本文围绕VTK Learning Seven主题,深入解析体绘制与交互拾取的实操要点,帮助开发者跨越学习平台期。

weixin_29038537的博客 205

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VTK_Learning_交互与拾取_点拾取

1.拾取 选择拾取是人机交互过程的一个重要功能。 一个最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时需要用鼠标来选择所要控制的角色,这就要用到拾取功能。 另外,在某些三维图形的编辑软件中,经常需要编辑其中的一个点、一个面片或者一个局部区域,这也需要通过拾取功能来完成。 VTK中定义了多个拾取功能的类,具体的继承关系如下: VTK中所有的拾取类都继承自vtkAbstrac...

weixin_38293453的博客 602

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PCLVisualizer高级玩法:自定义VTK交互器实现点云拾取与标注(Qt环境)

本文详细介绍了在Qt环境下通过自定义VTK交互器增强PCLVisualizer功能的高级技巧,包括点云拾取、动态标注和事件处理。通过继承vtkInteractorStyle实现精准交互逻辑,为自动驾驶和工业检测等领域提供高效解决方案,显著提升三维点云处理的工作效率。

mm9012的博客 648

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VTK自定义交互实战:坐标拾取与Qt嵌入完整指南

三维可视化应用中,交互能力往往决定业务价值。VTK作为开源的三维渲染引擎,默认交互器只提供旋转、平移、缩放等基础相机控制,难以满足坐标拾取、测量、框选等真实场景需求。理解VTK的事件分发链路和坐标系换算原理,是自定义交互器的基础。通过继承vtkInteractorStyle并重写事件回调,可以基于vtkCellPicker实现精确的世界坐标拾取,并通过自定义事件与Qt界面解耦通信。这类交互组件广泛应用于医学影像分析、有限元后处理、地质建模等领域。本文从事件机制出发,手把手实现一个可复现的坐标拾取交互器,并讲

weixin_30218749的博客 88

VTK入门实战:小球加标签与交互拾取完整拆解

三维可视化开发中,VTK作为开源渲染引擎,其核心价值在于将几何数据通过渲染管线高效转化为可交互的场景。理解数据源、映射器、Actor、渲染器、渲染窗口这条流水线,是所有三维应用的基础。从工程实践角度看,在模型上叠加文字标注是最普遍的需求,而标签的实现方式直接决定了交互体验与可读性。围绕“小球加标签”这一经典案例,可完整走通环境安装、渲染管线逐层运作、四种标签方案的选型逻辑,以及通过拾取机制实现鼠标点击更新标签的交互流程,同时针对黑白窗口、中文乱码等高频踩坑点给出排查方法。无论刚接触VTK的初学者,还是希望在

weixin_29038155的博客 292
上一篇: VTK交互之Widget
下一篇: wxPython之解决闪烁
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值