zoukankan      html  css  js  c++  java
  • FreeCAD二次开发-基于PyQT对话框与FC交互的开发

    • 版本

    FreeCAD0.18.2+PyCharm Community 2020.3.3

    • 演示效果

    • 环境搭建步骤

    1.先安装好FreeCAD和PyCharm

    2.添加环境变量

     

     点击确定,全部关掉。

    3.测试变量是否生效(CMD打开控制台,输入python回车)

    弹出如下,说明可以进入FreeCAD自带的python解释器

     4.创建工作台Workbench(挂菜单和工具条)

    在D:Program FilesFreeCAD 0.18Mod文件夹里新建一个空的文件夹,取名Demo

     在Demo文件夹里创建两个py文件

    具体创建步骤请看这篇文章(这里不做详细解释了)FreeCAD二次开发-创建Python工作台,添加菜单栏和工具条,FreeCAD命令

     源代码

    Init.py为空的

    InitGui.py

    import os
    import FreeCADGui as Gui
    import FreeCAD as App
    
    class Demo_Workbench ( Workbench ):
        MenuText = "Demo"
        ToolTip = "Demo workbench"
        Icon = FreeCAD.getHomePath() + "Mod/Demo/icons/1.svg"
        
        def Initialize(self):
            """This function is executed when FreeCAD starts"""
            import MyCommand1 # import here all the needed files that create your FreeCAD commands
            self.list = ['MySecondCommand2'] # A list of command names created in the line above
            self.appendToolbar('My Commands',self.list) # creates a new toolbar with your commands
            self.appendMenu('My New Menu',self.list) # creates a new menu
            self.appendMenu(["An existing Menu", "My submenu"], self.list)  # appends a submenu to an existing menu
    
        def Activated(self):
            """This function is executed when the workbench is activated"""
            return
    
        def Deactivated(self):
            """This function is executed when the workbench is deactivated"""
            return
    
        def ContextMenu(self, recipient):
            """This is executed whenever the user right-clicks on screen"""
            # "recipient" will be either "view" or "tree"
            #self.appendContextMenu("My commands", self.list)  # add commands to the context menu
    
        def GetClassName(self):
            # this function is mandatory if this is a full python workbench
            return "Gui::PythonWorkbench"
    
    Gui.addWorkbench(Demo_Workbench())
    
    Caesar卢尚宇
    2021年3月14日

    代码注解

     下面在D:Program FilesFreeCAD 0.18ModDemo创建一个icons文件夹,里面放svg图片

    给工作台调用,svg图片下载地址https://www.iconfont.cn/ 随便找个svg下载就好了

     5.创建执行命令py文件

     源代码

    import FreeCAD, FreeCADGui
    import FreeCAD
    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog,QMdiArea,QMdiSubWindow
    import MyCreateBlock
    from PySide import QtGui, QtCore
    
    class MySecondCommand2:
        def GetResources(self):
            return {'Pixmap': 'a2p_Solver', 'MenuText': '创建块', 'ToolTip': '输入参数,创建块'}
    
        def Activated(self): #点击按钮执行的动作
            """Do something here"""
            toplevel = QApplication.topLevelWidgets()
            for i in toplevel:
                if i.metaObject().className() == "Gui::MainWindow":
                    ui = MyCreateBlock.Ui_MainWindow()
                    my_mw = QMainWindow(i)
                    ui.setupUi(my_mw)
                    my_mw.show()
                    sys.exit(app.exec_())
                    return None
            raise Exception("No main window found")
    
        def IsActive(self):
            """Here you can define if the command must be active or not (greyed) if certain conditions
            are met or not. This function is optional."""
            return True
    FreeCADGui.addCommand('MySecondCommand2', MySecondCommand2())
    
    Caesar卢尚宇
    2021年3月14日

    代码注解

     6.在PyCharm里创建pyqt对话框

    先打开PyCharm

    点击打开,选择我们上面创建的那个工作台Demo文件夹

     进来如下

     下面开始添加qtdesigner和pyuic

    qtdesigner是qt设计对话框的

    pyuic是将对话框ui文件转成py文件的

    具体步骤请看这几篇博客,主要看第二篇

    FreeCAD二次开发-使用PyQt5界面开发例子1(代码生成界面)

    FreeCAD二次开发-使用PyQt在Pycharm添加QtDesigner和PyUIC

    FreeCAD二次开发-FreeCAD+PyQt5界面开发例子2(用QtDesigner生成界面)

    qtdesigner没有的,可以去GitHub上下载fc的源代码,里面有个FreeCADLibs_11.5.3_x64_VC12文件夹,里面的bin里就有designer

     pyuic没有的,可以自己电脑联网,拿cmd控制台输入内容,下载pyqt5,python组件可以直接下载,就能把pyuic一并下载下来,具体怎么下,自己百度吧,我也忘记了,然后把pyuic放到D:Program FilesFreeCAD 0.18in里

     7.都创建完之后,开始创建对话框

     选择Main Window

     创建如下对话框,添加控件。(怎么弄自己百度)

     完事后,点击保存,给个名字,就保存到默认位置处

     保存后看到这里多出来一个ui文件

     如果没出现ui文件,就自己手动刷新一下,然后就出来了

     8.下面将ui文件转成py文件

    我们看到了转换后的py文件

    9.去这个py文件里写代码,在编辑器里双击打开它

    添加import引用,这个地方上叫命名空间还是叫头文件,不清楚,我上搞C++的,对python不上很熟

     绑定槽和信号

            #绑定槽和信号
            self.pushButton.clicked.connect(self.btn)

    添加方法

        #创建块代码
        def btn(self):
            FreeCAD.ActiveDocument.addObject("Part::Box", "Box")
            FreeCAD.ActiveDocument.ActiveObject.Label = "Cube"
            FreeCAD.ActiveDocument.ActiveObject.Length = float(self.lineEdit.text())
            FreeCAD.ActiveDocument.ActiveObject.Width = float(self.lineEdit_2.text())
            FreeCAD.ActiveDocument.ActiveObject.Height = float(self.lineEdit_3.text())
            FreeCAD.ActiveDocument.recompute()
            FreeCADGui.SendMsgToActiveView("ViewFit")

    最后保存全部py文件

    Ctrl+S ...

    10.打开fc

    看到了我们创建的工作台了

     菜单按钮也都挂上去了,但是有点小问题,按钮图标没加上

    那我们换个图标,打开FC点定制

     点到宏点图标

     我们就选择这个小人图标吧,比较好看点,记住它叫的名字

     更改一下图标名字

     在保存重启fc

     我们发现小人菜单按钮已经出来了,子菜单也出来了,其实这里也可以显示自己的svg图片,具体怎么弄,我还没搞出来,

    现在这样弄,也只是调别的工作台svg

     开始执行我们的命令,

    功能演示

    FreeCAD二次开发-基于控制台模式FC外部开发

    最后结尾,

    本人只是一名开源CAD软件开发爱好者,业余的

    并不是职业开发FC的

    所有东西也都是自己和同事请教,去官网和论坛翻英文资料,如有错误还请批评指正

    也欢迎各位留言讨论,交流技术

    Caesar卢尚宇

    2021年3月14日

    作者: 阿飞

    出处: https://www.cnblogs.com/nxopen2018/>

    关于作者:......

    如有问题, 可在底部(留言)咨询.

  • 相关阅读:
    day 38
    day 37
    day 36
    day 35
    day 34
    day 33
    day 32
    day 31
    day 30
    day 29
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14533834.html
Copyright © 2011-2022 走看看