QGIS二次开发:集成二维CAD控件MxDraw

这篇具有很好参考价值的文章主要介绍了QGIS二次开发:集成二维CAD控件MxDraw。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文记录在QGIS中集成MxDraw控件的方法。

QGIS二次开发:集成二维CAD控件MxDraw,GIS,其他

 一、安装MxDraw

参见笔者博文“FreeCAD二次开发:集成二维CAD控件MxDraw”所述的安装方法。

二、编译安装QGIS

参见笔者博文"Windows 10下编译安装QGIS"所述的编译安装方法。

二、集成方法

2.1 添加MxDrawView.ui文件

按照QGIS的管理,Qt ui文件可放到src/ui目录及其子目录下。因此,可将MxDrawView.ui拷贝到src/ui/gd目录下,并修改src/ui/CMakeLists.txt,

# ...

if (BUILD_GDGIS)
	file(GLOB GD_UIS "${CMAKE_CURRENT_SOURCE_DIR}/gd/*.ui")
endif()

if (BUILD_WITH_QT6)
  QT6_WRAP_UI(QGIS_UIS_H
    ${QGIS_UIS}
    ${SYMBOLLAYER_UIS}
    ${EDITORWIDGET_UIS}
    ${PAINTEFFECT_UIS}
    ${PROCESSING_UIS}
    ${AUTH_UIS}
    ${RASTER_UIS}
    ${STYLEDOCK_UIS}
    ${LAYOUT_UIS}
    ${MESH_UIS}
    ${POINTCLOUD_UIS}
    ${_3D_UIS}
    ${CALLOUT_UIS}
    ${LABELING_UIS}
    ${NUMERICFORMAT_UIS}
    ${ATTRIBUTEFORMCONFIG_UIS}
    ${GEOREFERENCER_UIS}
    ${ANNOTATION_UIS}
    ${SENSOR_UIS}
	${GD_UIS}
  )
else()
  QT5_WRAP_UI(QGIS_UIS_H
    ${QGIS_UIS}
    ${SYMBOLLAYER_UIS}
    ${EDITORWIDGET_UIS}
    ${PAINTEFFECT_UIS}
    ${PROCESSING_UIS}
    ${AUTH_UIS}
    ${RASTER_UIS}
    ${STYLEDOCK_UIS}
    ${LAYOUT_UIS}
    ${MESH_UIS}
    ${POINTCLOUD_UIS}
    ${_3D_UIS}
    ${CALLOUT_UIS}
    ${LABELING_UIS}
    ${NUMERICFORMAT_UIS}
    ${ATTRIBUTEFORMCONFIG_UIS}
    ${GEOREFERENCER_UIS}
    ${ANNOTATION_UIS}
    ${SENSOR_UIS}
	${GD_UIS}
  )
endif()

# ...

2.2 添加MxDrawView类

界面相关的代码放到src/gui目录下,将MxDrawView.h、MxDrawView.cpp拷贝到src/gui/gd目录下,并修改CMakeLists.txt文件

# ...

# sources for GDGIS
if (BUILD_GDGIS)

  set(GD_HDR_FILES
		gd/MxDrawview.h
	)

  set(GD_SRC_FILES
    gd/MxDrawview.cpp
  )

	SOURCE_GROUP("gd" FILES ${GD_HDR_FILES} ${GD_SRC_FILES})

  set(QGIS_GUI_HDRS
    ${QGIS_GUI_HDRS}
    ${GD_HDR_FILES}
  )

  set(QGIS_GUI_SRCS
    ${QGIS_GUI_SRCS}
    ${GD_SRC_FILES}
  )

endif()

# ...

# Link AxBase,AxContainer for GDGIS
if (BUILD_GDGIS)
  find_package(${QT_VERSION_BASE} COMPONENTS AxBase AxContainer REQUIRED)
  target_link_libraries(qgis_gui
    ${QT_VERSION_BASE}::AxBase
    ${QT_VERSION_BASE}::AxContainer
  )
endif()

2.3 实现MxDrawView类

仿照MxDrwa自带例子TestQtMxDraw,实现MxDrawView

#ifndef gd_MxDrawView_H
#define gd_MxDrawView_H

#include "qgis_gui.h"
#include <QMainWindow>

namespace gd
{
    class Ui_MxDrawView;

    class GUI_EXPORT MxDrawView : public QMainWindow
    {
        Q_OBJECT

    public:
        MxDrawView(QWidget* parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
        ~MxDrawView();

    protected Q_SLOTS:

    private slots:
        void on_pushButton_clicked();

        void on_axWidget_ImplementCommandEvent(int iCommandId);

    protected:
        Ui_MxDrawView* ui;

    };
} // namespace gd

#endif // gd_MxDrawView_H
#include "MxDrawView.h"
#include "ui_MxDrawView.h"

using namespace gd;

MxDrawView::MxDrawView(QWidget* parent, Qt::WindowFlags flags)
	: QMainWindow(parent, flags),
	ui(new Ui_MxDrawView)
{
	// Set up ui
	ui->setupUi(this);
	connect(ui->axWidget, SIGNAL(ImplementCommandEvent(int)), this, SLOT(on_axWidget_ImplementCommandEvent(int)));
}

MxDrawView::~MxDrawView()
{
}
void MxDrawView::on_pushButton_clicked()
{
	// 执行控件自定义命令函数,命令的id为2,这个id用户可以自己取任意数,可以理解为是给执行的命令一个编号.
	ui->axWidget->dynamicCall("DoCommand(const qint32&)", 2);
}

void MxDrawView::on_axWidget_ImplementCommandEvent(int iCommandId)
{

	if (iCommandId == 2)
	{
		// 调用控件打开函数,打开H:盘的1.dwg文件。
		std::string filename = "H:\\1.dwg";
		//ui->axWidget->dynamicCall("OpenDwgFile(const QString&)", "H:\\1.dwg");
		ui->axWidget->dynamicCall("OpenDwgFile(const QString&)", QString::fromUtf8(filename.c_str()));
	}

2.4 嵌入MxDrawView窗体

修改src/app/qgisapp.cpp,创建并嵌入MxFrawView窗体,

QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipBadLayers, bool skipVersionCheck, const QString &rootProfileLocation, const QString &activeProfile, QWidget *parent, Qt::WindowFlags fl )
  : QMainWindow( parent, fl )
  , mSplash( splash )
{
//...
  mCentralContainer = new QStackedWidget;
  mCentralContainer->insertWidget(0, mMapCanvas);

#ifdef GDGIS
  QTabWidget* tabWidget = new QTabWidget;
  tabWidget->addTab(mCentralContainer, "Map");
  tabWidget->addTab(new gd::MxDrawView(), "CAD");
  centralLayout->addWidget(tabWidget, 0, 0, 2, 1);
#else
  mCentralContainer->insertWidget(1, mWelcomePage);
  centralLayout->addWidget(mCentralContainer, 0, 0, 2, 1);
#endif 

  mInfoBar->raise();
//...
}

网络资料

 FreeCAD二次开发:集成二维CAD控件MxDrawhttps://blog.csdn.net/qq_26221775/article/details/121192465?spm=1001.2014.3001.5502

Windows 10下编译安装QGIShttps://blog.csdn.net/qq_26221775/article/details/122792445?spm=1001.2014.3001.5502MxDrawhttps://www.mxdraw.com/

QGIShttps://www.qgis.org/en/site/文章来源地址https://www.toymoban.com/news/detail-610775.html

到了这里,关于QGIS二次开发:集成二维CAD控件MxDraw的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QGIS3.28的二次开发一:编译工程

    更新:最近写了个3.18.3版本的编译教程,没有出现任何问题。 QGIS3.18编译教程_程序员班长的博客-CSDN博客 环境:VS2019+OSGeo4W+CMake_3.26+Cygwin64+QGIS_3.28 注意:一定要按照步骤顺序来! VS2019下载链接 https://my.visualstudio.com/Downloads?q=visual%20studio%202019wt.mc_id=o~msft~vscom~older-downloads 下载完

    2024年02月15日
    浏览(49)
  • QGIS3.28的二次开发九:添加矢量要素

    对矢量要素的编辑是 GIS 软件很重要的功能点之一,也是最难实现的功能点之一。编辑矢量要素涉及到很多方面的考虑,包括且不限于矢量要素的几何类型,拓扑关系,构成要素的节点的增删改,编辑会话 (session) 的启动、回溯和提交,要素属性的增删改等。本文不会也不可能

    2024年02月12日
    浏览(47)
  • CAD 二次开发-Handle

    在 CAD 二次开发中, Handle 是每个 CAD 实体的唯一标识符,类似于一个 ID。它是一个 long 类型的整数,可以用于标识和引用 CAD 实体,如图形 对象、块、图层、实体 等。 使用 Handle 可以方便地操作 CAD 实体,例如: 获取 CAD 实体的 Handle。 根据 Handle 获取 CAD 实体。 在上面的示例

    2023年04月20日
    浏览(45)
  • 网页CAD二次开发(在线CAD SDK)用到的数学库

    在CAD二次开发中, 正确的使用数学库是十分重要的, 我们不需要会很多数学知识, 只要会普通的四则运算和调用mxcad提供的api即可,通过[快速入门]了解了打开图纸后,如果要对图形进行处理,就需要各种计算, mxcad提供了一些类来参与计算或者表示一些数据结构,相关的API查询

    2024年02月20日
    浏览(45)
  • Cad二次开发关于多段线

    NumberOfVertices 是一个表示多段线(Polyline)对象中顶点数量的属性。顶点表示多段线上的角点或拐点,决定了多段线的形状。 在AutoCAD等CAD软件中,多段线是由一系列直线段组成的图形对象。它可以包含任意数量的顶点,并且可以是开放的或闭合的。 NumberOfVertices 属性用于获取

    2024年02月14日
    浏览(37)
  • QGIS二次开发六:VS不借助QT插件创建UI界面

    上一篇博客我们说了在VS中如何使用QT插件来创建UI界面,但是我们二次开发QGIS的第一篇博客就说了,最好使用OSGeo4W中自动下载的QT进行QGIS二次开发,这样兼容性是最好的,那么该如何在VS中不使用外部安装的QT以及QT的VS插件情况下进行UI界面的创建和使用呢? 如果你仔细看完

    2024年02月13日
    浏览(38)
  • 【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗

    找到配置文件目录,遍历下面的每个配置文件; 找到 Variables 下的 TRUSTEDPATHS 项目;在后面添加新的目录即可,多个目录使用分号分隔;

    2024年02月07日
    浏览(45)
  • 2.ObjectArx .NET 二次开发入门(CAD 2016)

    愿你出走半生,归来仍是少年!  目录 1. 环境准备 1.1 ObjectArx .NET 1.2 VS安装  1.2.1 CAD与Visiul Studio版本对照  1.2.1 Visiul Studio2022关于.NET 4.5的处理 2.Hellow World 2.1新建项目 2.2加载依赖 2.3 编写第一个命令 2.4 生成、加载并测试         开发这事情,本着有新的肯定用新的思想,

    2024年02月11日
    浏览(34)
  • python-cad二次开发入门教程

    用python做cad二次开发已经快两年的时间了,今天看到群里一个哥们到处问怎么python怎么进行cad二次开发,不禁回想起当初自己找教程找的焦头烂额,却始终不得办法的辛酸。现在网上的教程逐渐多了起来,但是我看很多都没有直接讲一个问题,那就是“ 我到底怎么去二次开发

    2024年02月06日
    浏览(41)
  • c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色

    c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色 using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq; using System.Text; using Application = Autodesk.AutoCAD.Applicat

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包