济南友泉软件有限公司

FreeCAD是一套基于OpenCASCADE/QT的三维全参数化建模开源代码,虽然提供了Draft、TechDraw等二维绘图功能,但是其二维建模能力仍旧比较弱。

Ref. from FreeCAD TechDraw-----------------------------------------------------------------------------------------------

If your primary goal is the production of complex 2D drawings and DXF files, and you don't need 3D modelling, FreeCAD may not be the right choice for you. You may wish to consider a dedicated software program for technical drafting instead, such as LibreCAD or QCad.

-----------------------------------------------------------------------------------------------Ref. from FreeCAD TechDraw

因此,需要研究借助于(非)商业软件包来强化FreeCAD的二维建模功能。本文探讨FreeCAD集成梦想CAD二维控件MxDraw 5.2的实现方法。

本文涉及的知识点:

  • FreeCAD文档/视图架构
  • 自定义视图窗体

一、MxDraw

梦想CAD是专业的CAD插件(控件),经过10年研发,可轻松在网页、手机及BS/CS程序中使用CAD和浏览编辑DWG文件,不需安装AutoCAD即可运行。与应用相对应,梦想CAD提供了电脑版、手机版、网页版等三种开发包。

梦想CAD电脑版包括2D、3D等多个版本,支持ObjectARX开发接口,C#,Delpi,VC,VB,JAVA,C++Builder、PHP,.NET,易语言,PowerBuild等。

1.1 安装MxDraw 5.2

下载梦想2D开发包MxDraw5.2TryVersion.exe,此开发包实际上是一个压缩文件,下载之后双击运行便会自动完成解压。

在解压目录中,运行MxDrawx64Setup(20210905).exe以完成MxDraw 5.2(64位)的安装以及注册MxDrawX.ocx。MxDraw默认安装在C:\Program Files\Mxkd\MxDrawx64。

1.2 测试

在Src/MxDraw5.2/Samples中,有一些测试项目,打开TestQtMxDraw.sln,编译链接之后,运行程序以确保MxDraw 5.2安装没有问题。

二、集成方法

在前面的FreeCAD源码分析篇章中,已经就FreeCAD文档\视图架构做了分析,故这里不赘述。

2.1 文档\视图对象

为了将MxDraw嵌入到FreeCAD文档\视图架构,首先需要创建一个MxDraw文档对象类型,

    /*** Embed the MxDraw control into FreeCAD's Document Object system.*/class MxDraw : public App::DocumentObject{PROPERTY_HEADER(WaterBim::MxDraw);public:/// ConstructorMxDraw();virtual ~MxDraw();/// returns the type name of the ViewProvidervirtual const char* getViewProviderName(void) const {return "WaterBimGui::ViewProviderMxDraw";}};

与这个文档对象类型对应,需要定义一个视图对象,

/** The provider for MxDraw* Use MxDraw control to do actual work.*/class ViewProviderMxDraw : public Gui::ViewProviderDocumentObject{PROPERTY_HEADER_WITH_OVERRIDE(WaterBimGui::ViewProviderMxDraw);public:/// constructor.ViewProviderMxDraw();/// destructor.~ViewProviderMxDraw();void setDisplayMode(const char* ModeName) override;virtual bool doubleClicked(void) override;void setupContextMenu(QMenu* menu, QObject* receiver, const char* member) override;MxDraw* getMxDrawObject() const;QIcon getIcon() const override;virtual Gui::MDIView* getMDIView() override;protected:MxDrawView* showMxDrawView();private:QPointer<MxDrawView> view;};

在ViewProviderMxDraw中,通过成员函数getMDIView() 来自定义视图窗体,

MxDrawView* ViewProviderMxDraw::showMxDrawView()
{if (!view) {Gui::Document* doc = Gui::Application::Instance->getDocument(this->pcObject->getDocument());view = new MxDrawView(doc, this->pcObject, Gui::getMainWindow());view->setWindowIcon(Gui::BitmapFactory().pixmap(":icons/mxdraw.png"));view->setWindowTitle(QString::fromUtf8(pcObject->Label.getValue()) + QString::fromLatin1("[*]"));Gui::getMainWindow()->addWindow(view);startEditing();}return view;
}Gui::MDIView* ViewProviderMxDraw::getMDIView() {return showMxDrawView();
}

2.2 自定义视图窗体

参考MxDraw Samples中示例TestQtMxDraw,可以知道MxDraw实际上是通过QAxWidget实现的二维CAD窗体的创建,仿照TestQtMxDraw,定义MxDrawView视图窗体类,

    class MxDrawView : public Gui::MDIView{Q_OBJECTTYPESYSTEM_HEADER();public:MxDrawView(Gui::Document* pcDocument, App::DocumentObject* docObj, QWidget* parent);~MxDrawView();protected Q_SLOTS:private slots:void on_pushButton_clicked();void on_axWidget_ImplementCommandEvent(int iCommandId);protected:Ui::MxDrawView* ui;};

参考资料

FreeCAD TechDrawhttps://wiki.freecad.org/TechDraw_Workbench

梦想CAD控件https://www.mxdraw.com/

FreeCAD源码分析:FreeCADGui模块https://blog.csdn.net/qq_26221775/article/details/113898970

FreeCAD二次开发:集成二维CAD控件MxDraw相关推荐

  1. MapGis二次开发——基础地图目录树控件的加载

    MapGis二次开发--基础地图目录树控件的加载 第一步:添加MapGis引用 MapGis动态库位置是在你安装位置下的\Program\plugin下,例如我的安装位置就是:D:\MapGIS 10 ...

  2. EngineerCMS利用梦想CAD控件MXdraw进行图纸在线编辑,保存到服务器

    梦想控件网页版开发 浏览器要用梦想控件官方提供的企业版chrome,这个是官方利用chrome开源改造后支持ocx控件的浏览器. 浏览器打开dwg文件的链接,调用梦想控件打开图纸,进行修改后,可保存到 ...

  3. CATIA二次开发CAA实现MFC树形控件的方法研究

    CATIA使用CAA二次开发的时候,如果需要对树形数据对象实现管理,使用树形控件是非常好的选择.但是,CAA本身提供的控件较少,多数情况无法较好地满足项目要求,如果你的水平足够高,也可以使用CATNa ...

  4. Revit二次开发-->引用WPF第三方控件库HandyControl

    WPF框架下,HandyControl的主题引用放在App.xmal里面,但是Revit插件是一个类库,没有App.xmal文件,怎么处理呢. 其实也是一样的,App.xmal可以看做是全局引用样式. ...

  5. c# cad二次开发 ribbon界面 给CAD加个菜单栏

    c# cad二次开发 ribbon界面 给CAD加个菜单栏 using System; using System.Collections.Generic; using System.Text; usi ...

  6. onlyoffice二次开发集成、onlyoffic集成

    onlyoffice二次开发集成.onlyoffic集成 支持功能 新增word,excel,ppt文档 在线多用户协同编辑文档 实时通讯 批注等功能 下面是demo的功能截图(架构:springbo ...

  7. CAD二次开发C#.Net编程-CAD创建右键菜单

    CAD二次开发&C#.Net编程-CAD创建右键菜单 private static ContextMenuExtension m_ContextMenu;//装载右键菜单public stat ...

  8. Revit二次开发 如何获得链接CAD中所有的多段线PolyLine?

    项目场景: 最近做的这个项目,涉及到提取链接CAD中的所有多段线,并根据这些多段线的几何信息做一些分析,但是产生了一些意想不到的问题. 问题描述 通过网上流传的提取手段,并不能完全提取CAD中的所有多 ...

  9. 继承QWidget使用QPainter自定义二维图形控件【Qt学习】

    继承QWidget使用QPainter自定义二维图形控件[Qt学习] 通过阅读该文章,将了解本文所说的二维图形控件的基本概念.为何要自定义二维图形控件.如何自定义二维图形控件. 该文章将首先进行一些书 ...

最新文章

  1. Arm 十年重磅发布 v9 架构,不受 EAR 约束,未来将覆盖 3000 亿颗芯片
  2. 2019年AI拐点将出现:一次政府,资本与技术公司的围炉深省
  3. 让数据为你带来无限可能性
  4. error while loading shared libraries: libz.so.1错误
  5. Python 中re.split()方法
  6. Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解
  7. 【转】利用matlab生成随机数函数
  8. PowerDesigner将PDM导出生成WORD文档
  9. python单击url下载网页文件_使用不带url的python脚本从网页下载文件,调用onClick函数 - javascript...
  10. 2021年京东小魔方年中新品消费趋势报告
  11. keygenerator php,学习PHP生成器的使用
  12. pythongui界面实例_wxPython:python首选的GUI库实例分享(5)
  13. linux内核驱动摄像头图片,详解linux 摄像头驱动编写
  14. 优盘(U 盘) 采用TLC, MLC, SLC芯片 的区别 与使用寿命
  15. Axure 获取焦点
  16. 3d打印技术改变生活的影响
  17. 第五章: 项目范围管理
  18. 2022年新年焰火代码
  19. TexStudio 英文拼写检查 语法检查
  20. 打造新老员工双赢机制变对立为统一

热门文章

  1. 网络营销的特点和优势
  2. Mysql安装出现的问题Building CXX object sql/CMakeFiles/sql.dir/mysqld.cc.o
  3. 屏幕录像专家破解绿色版
  4. opencv离散傅里叶变换进行图像旋转校正
  5. 如何用python绘制圆_python怎么画圆
  6. vis network(visjs)安装简单使用
  7. 非随机参数估计的克拉美罗界(Cramer-Rao Bounds)
  8. 层次分析,critic以及topsis
  9. 面试被问频繁跳槽,怎么解释?
  10. Android 实现边下载边播放歌曲