通过外部Python调用FreeCAD

作者:Ethan Tian 致谢:牛师兄,思宇学姐&脑电分析与智能交互小组全体组员们

FreeCAD是一款开源的CAD软件,在开发与教学中经常会被使用。众所周知FreeCAD是基于Python开发的,且在软件内部可以非常方便的使用Python控制台来进行一系列操作。那么,我们能否实现通过外部Python调用FreeCAD呢?

平台选择

首先测试了直接使用官网上下载的FreeCAD 0.17,并没有跑通。于是转而寻找其他方式调用,最终发现anaconda里面可以配置freecad 0.18的第三方库。遂决定使用anaconda完成工作
(1)下载合适版本的anaconda
注意freecad 0.18包仅支持Python3.6及以上版本,通过 点我跳转 选择合适版本的anaconda(推荐下载5.1.0或5.2.0)
在Anaconda installer archive找到相应的安装包并下载安装

安装第三方库

装好Anaconda之后,首先建议大家使用conda update condaconda update all更新conda本身与所有的库文件,这两个命令需要执行比较长的时间,耐心等待即可
在Anaconda Prompt里输入anaconda search freecad命令搜索相关信息

通过anaconda show conda-forge/freecad命令进一步搜素,显示安装指令

按照输入conda install --channel https://conda.anaconda.org/conda-forge freecad,如果提示需要进行某项更新,通过回车确认即可
成功更新之后,打开Anaconda Navigator,在Environment中搜索freecad,看到了说明已经成功安装

为了以防万一,我们再去Anaconda的安装目录里Anaconda 3\Library\bin寻找是否已经有了FreeCAD这个文件。如果该目录下没有FreeCAD相关文件,则通过Anaconda Prompt里输入conda install freecad再进行一次安装

软件测试

运行Anaconda 3\Library\bin里面的FreeCAD.exe,出现主界面后勾选View——Panels——Python console 使Python控制台始终显示在窗口下方
当我们在FreeCAD进行操作时,相应的代码就会显示在下方的Pyhton控制台内;同理,在下方控制台输入指令代码,也会使软件进行一系列操作

下方控制台里生成的代码,同样是我们使用外部Pyhton控制FreeCAD时需要用到的代码

代码测试

执行下列代码,注意运行代码之前必须保证没有已打开的FreeCAD窗口

import sys
sys.path.append('C:\\Users\\jhwavggtg\\Anaconda3\\Library\\bin')#这里使用你自己的bin目录
import FreeCAD as app
import FreeCAD as App
import FreeCADGui as Gui
import FreeCADGui as gui
import Part, mathgui.showMainWindow() ##只有showMainWindow 之后能够调用GUI的所有功能
App.newDocument("Unnamed")
App.setActiveDocument("Unnamed")
App.ActiveDocument=App.getDocument("Unnamed")
Gui.ActiveDocument=Gui.getDocument("Unnamed")
Gui.activateWorkbench("PartWorkbench")
App.ActiveDocument.addObject("Part::Box","Box")
App.ActiveDocument.ActiveObject.Label = "Box"
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")
time.sleep(5)
App.getDocument("Unnamed").getObject("Box").Length = '2 mm'
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")
time.sleep(5)
App.getDocument("Unnamed").getObject("Box").Length = '20 mm'
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")
time.sleep(5)

运行代码时容易出现的问题
(1)找不到FreeCAD库
检查Anaconda的安装目录里Anaconda 3\Library\bin下是否有FreeCAD系列文件,没有的话,通过conda重新安装一次
(2)运行时报错could not find or load the QT platform plugin “window in”
解决办法配置环境变量,此处给出了我配置的内容,找到你自己电脑里的plugins文件配置好即可
名称: QT_QPA_PLATFORM_PLUGIN_PATH
内容: C:\Users\jhwavggtg\Anaconda3\Library\plugins

通过外部Python调用FreeCAD相关推荐

  1. 从Python调用外部命令

    您如何在Python脚本中调用外部命令(就像我在Unix Shell或Windows命令提示符下键入的一样)? #1楼 os.system不允许您存储结果,因此,如果您要将结果存储在某个列表中或sub ...

  2. python调用系统命令_Python如何调用外部系统命令

    前言 利用Python调用外部系统命令的方法可以提高编码效率.调用外部系统命令完成后可以通过获取命令执行返回结果码.执行的输出结果进行进一步的处理.本文主要描述Python常见的调用外部系统命令的方法 ...

  3. python调用系统命令_Python调用外部系统命令

    利用Python调用外部系统命令的方法可以提高编码效率.调用外部系统命令完成后可以通过获取命令执行返回结果码.命令执行的输出结果进行进一步的处理.本文主要描述Python常见的调用外部系统命令的方法, ...

  4. python 调用外部程序 终端异常_python调用外部命令

    python调用外部命令 os.system: 输出在终端上,捕捉不到 os.popen: 只能捕捉到标准输出,捕捉不到标准错误输出 os.popen2: 返回2个对象,一个是标准输入,一个是标准输出 ...

  5. 解决python调用 ffmpeg时 ‘ffmpeg‘ 不是内部或外部命令,也不是可运行的程序

    解决 python 调用 ffmpeg时 'ffmpeg' 不是内部或外部命令,也不是可运行的程序 在windows系统下, 我们使用windows下,使用ffmpeg库调用FFmpeg工具来提取视频 ...

  6. python c#_【分享】C# 调用 Python 脚本, 与 Python 调用 C# 类库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C# 调用 Python 脚本 操作步骤 1.创建一个控制台程序. O0101_DotNetCallPython. 2.管理 Nuget 程序包,搜索 I ...

  7. linux 下Python调用C模块

    在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模块却比较简单,下面还是以helloWorld.c 和 main.py 做一说明: (1)编写C代码,hello ...

  8. 深入了解以太坊虚拟机第4部分——ABI编码外部方法调用的方式

    本文由币乎社区(bihu.com)内容支持计划赞助. 在本系列的上一篇文章中我们看到了Solidity是如何在EVM存储器中表示复杂数据结构的.但是如果无法交互,数据就是没有意义的.智能合约就是数据和 ...

  9. Linux下用Python调用C模块

    http://blog.chinaunix.net/uid-22920230-id-3418876.html 在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模 ...

最新文章

  1. phpstrom连接服务器上传文件
  2. 使用 ASP.NET 配置类
  3. ITK:使用二进制阈值对图像阈值
  4. LNMP(nginx防盗链,访问控制,解析php相关配置,Nginx代理,常见502问题)
  5. 通俗易懂的来理解Iaas,Paas,SaaS
  6. linux 环境变量详解,linux环境变量实例详解
  7. 统计学三大分布(卡方、t、F)即相应概率密度图的R语言实现
  8. html5在zigbee中起什么作用,ZigBee是什么?ZigBee在智能家居中扮演什么角色
  9. jQuery-元素节点操作
  10. 动态数组--一维数组
  11. 关于WAP技术的介绍
  12. 收集表的使用与批量图片下载
  13. 服务计算——Selpg
  14. 如何使用MySQL存储Emoji表情,UTF-8和UTF-8MB4字符编码有何区别?
  15. springboot结合redis解决重复提交问题的实际应用
  16. Unity---Shader
  17. Android 高德地图so包太大,高德地图包变大问题解决方案
  18. BZOJ3356 : [Usaco2004 Jan]禁闭围栏
  19. 绿灰配色的微信营销PPT模板-优页文档
  20. 【半导体先进工艺制程技术系列】SOI技术(下)

热门文章

  1. 51单片机实现两路AD检测、数码管显示、串口获取
  2. 网龙入股大数据智能教育平台 -- “爱多分”
  3. icloud android,如何将照片从 iCloud 转移到 Android
  4. 我们为什么要使用 Markdown
  5. Selenium自动化测试框架基础学习(元素表单操作)(Selenium操作)
  6. 杨辉三角详细解析(C语言)
  7. 站长百科访谈第59期:张清分享网站优化技巧
  8. Java面向对象基础呕心沥血三千字
  9. practice是什么意思_practice是什么意思|practice的中文翻译 - 医学词典
  10. 百度收购PPS敲定 与爱奇艺整合将成难点