渲染SDK 0.1.2
载入中...
搜索中...
未找到
创建距离标注

概述

本教程提供了创建距离标注的教程

描述

通过插件管理模块创建标注插件,可自由组合数据,与ArrowAnnocationProp插件相比更加灵活

示例代码

效果图

示例图片

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.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);
//创建标注
//构造线数据
std::vector <AMCAXRender::Line3D> lines;
lines.push_back({ { 20,0,0 }, { -20,0,0 } });
//构造偏移线段,(线段两端固定像素偏移)
std::vector <AMCAXRender::Line3D> offsetLines;
offsetLines.push_back({ {20,0,0}, { 20,0,10 } });
offsetLines.push_back({ {-20,0,0}, { -20,0,10 } });
std::vector<std::tuple<double, double>> offsetPad;
offsetPad.push_back({ 20,10 });
offsetPad.push_back({ 20,10 });
//构造箭头对
std::vector<AMCAXRender::Point3D> arrowPairs;
arrowPairs.push_back({ 20,0,0 });
arrowPairs.push_back({-20,0,0 });
//箭头方向
std::vector<AMCAXRender::Point3D> arrowPairsDirection;
arrowPairsDirection.push_back({ std::get<0>(arrowPairs[0]) - std::get<0>(arrowPairs[1]),std::get<1>(arrowPairs[0])- std::get<1>(arrowPairs[1]), std::get<2>(arrowPairs[0])- std::get<2>(arrowPairs[1]) });
arrowPairsDirection.push_back({ std::get<0>(arrowPairs[1]) - std::get<0>(arrowPairs[0]),std::get<1>(arrowPairs[1]) - std::get<1>(arrowPairs[0]), std::get<2>(arrowPairs[1]) - std::get<2>(arrowPairs[0]) });
//构造标注文本
std::vector<AMCAXRender::Point3D> labels;
labels.push_back({0,0,0});
std::vector<std::wstring> labelsText;
labelsText.push_back(L"标注文本");
auto id = mRender->pluginManage->AddPluginFromType(AMCAXRender::PluginType::kDistance);
auto att = mRender->pluginManage->GetProperty<AMCAXRender::DistanceProp>(id);
att->SetLines({lines});
att->SetOffsetLines(offsetLines, offsetPad);
att->SetArrowPairs(arrowPairs, arrowPairsDirection);
att->SetLabels(labels, labelsText);
mRender->pluginManage->SetProperty(id, att);
mRender->cameraManage->ResetCamera();
mRender->entityManage->DoRepaint();
}
Mainwindow::~Mainwindow()
{
}
AMCAX_RENDER_API std::shared_ptr< IRenderComponent > CreateRenderComponent(QWidget *parent)
Create Render Component
@ kDistance
Distance Ruler
定义 Constants.h:229
Distance ruler
定义 PluginProperty.h:249
virtual void SetLines(std::vector< Line3D > &lines)=0
Set line data

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.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>

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(Annocation)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
find_package(AMCAXRender )
find_package(Qt6 COMPONENTS Widgets Core Gui 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 Qt6::Core Qt6::Gui Qt6::Widgets)
target_link_libraries(${PROJECT_NAME} PRIVATE AMCAXRender::AMCAXRender)

更多

更多属性请参考 AMCAXRender::DistanceProp