渲染SDK 0.1.2
载入中...
搜索中...
未找到
交互事件示例

概述

本教程提供了Render SDK交互事件模块的使用教程。

前置条件

如果未初始化SDK,需要通过以下代码初始化

//创建sdk组件
auto mRenderComponent = AMCAXRender::CreateRenderComponent(this);
//创建实体Render
auto mRender = mRenderComponent->CreateBasicRender();
AMCAX_RENDER_API std::shared_ptr< IRenderComponent > CreateRenderComponent(QWidget *parent)
Create Render Component

示例代码

以下是交互中心有关事件的部分示例

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(EventSample)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
add_definitions(-DUSE_AMCAX_KERNEL)
list(APPEND CMAKE_PREFIX_PATH ${AMCAXRender_PATH})
find_package(AMCAXRender )
find_package(Qt6 COMPONENTS Widgets Core Gui REQUIRED)
list(APPEND CMAKE_PREFIX_PATH ${Json_PATH})
find_package(nlohmann_json 3.11.3 REQUIRED)
file(GLOB ALL_UI_FILES *.ui)
file(GLOB ALL_FILES *.cpp *.h)
add_executable(${PROJECT_NAME} ${ALL_UI_FILES} ${ALL_FILES})
target_link_libraries(${PROJECT_NAME} PRIVATE ${AMCAX_components})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
target_link_libraries(${PROJECT_NAME} PRIVATE AMCAXRender::AMCAXRender)

main.cpp

#include <QApplication>
#include "Mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Mainwindow w;
w.show();
return a.exec();
}

Mainwindow.h

#pragma once
#include <QWidget>
#include "ui_Mainwindow.h"
#include <AMCAXRender.h>
class Mainwindow : public QWidget
{
Q_OBJECT
public:
Mainwindow(QWidget *parent = nullptr);
~Mainwindow();
private:
Ui::MainwindowClass ui;
std::shared_ptr<AMCAXRender::IRenderComponent> mRenderComponent;
std::shared_ptr<AMCAXRender::CBasicRender> mRender;
};
Component Creation

Mainwindow.cpp

#include "Mainwindow.h"
Mainwindow::Mainwindow(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
//初始化
mRenderComponent = AMCAXRender::CreateRenderComponent(this);
mRender = mRenderComponent->CreateBasicRender();
//窗口布局
ui.gridLayout->addWidget(mRender->widget);
//注册坐标系拾取事件
mRender->interactionCenter->RegisterMarkerEvent(AMCAXRender::MarkerEvent::cubeViewEvent,
[&](AMCAXRender::MarkerType markerType) {
});
//根据事件Id注销坐标系拾取事件
mRender->interactionCenter->UnregisterMarkerEvent(2);
//根据事件类型注销坐标系拾取事件
mRender->interactionCenter->UnregisterMarkerEvent(AMCAXRender::MarkerEvent::cubeViewEvent);
//注册移动坐标系事件
mRender->interactionCenter->RegisterMoveEvent([&](AMCAXRender::EntityId id, double* matrix) {
});
//获取当前鼠标的世界坐标
double worldPos[3];
mRender->interactionCenter->GetPointByMouse(worldPos);
//获取当前鼠标的屏幕坐标
int screenPos[2];
mRender->interactionCenter->GetPointByWorld(worldPos, screenPos);
//设置实体的线宽
mRender->interactionCenter->SetEntityLineWidth(2);
//注册鼠标事件
mRender->interactionCenter->RegisterMouseEvent([&](AMCAXRender::MouseEventType t) {
});
//根据事件Id注销鼠标事件
mRender->interactionCenter->UnregisterMouseEvent(1);
//注销所有鼠标事件
mRender->interactionCenter->UnregisterMouseEvent();
//注册焦点事件
mRender->interactionCenter->RegisterFocusEvent([&]() {});
//根据事件Id注销焦点事件
mRender->interactionCenter->UnregisterFocusEvent(1);
//注销所有焦点事件
mRender->interactionCenter->UnregisterFocusEvent();
//设置屏幕截图的文件名
mRender->interactionCenter->SetScreenShot("C:\\xxx.jpg");
mRender->cameraManage->ResetCamera();
mRender->entityManage->DoRepaint();
}
Mainwindow::~Mainwindow()
{
}
MouseEventType
Mouse Event Type
定义 Constants.h:91
@ cubeViewEvent
Cube
定义 Constants.h:135
MarkerType
Marker Type
定义 Constants.h:140

Mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainwindowClass</class>
<widget class="QWidget" name="MainwindowClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
<string>Mainwindow</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout"/>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

更多

更多事件管理请参考 InteractionCenter.h