python - 从 python 脚本运行 FreeCAD 模块 drawing_dimensioning 或 TechDrawGui
问题描述
注意 - 我没有在 FreeCAD 内的 python 控制台中运行脚本。这一切都在安装了 FreeCAD 的 docker 容器中的 python 脚本中。
我正在尝试制作由 FreeCAD 在 python 脚本中运行生成的页面的 SVG。我对形状的看法没问题,但不知道如何添加尺寸并保存到 SVG。据我所知,有几个选项可以接近...
- 使用较旧的绘图模块(和绘图尺寸):
我可以用我的形状视图制作页面的 SVG,但不能添加尺寸。如果我使用的是完整的 GUI FreeCAD,那么模块 drawing_dimensioning 是完美的。但是,我似乎无法从 python 脚本中使用这个模块。当我导入它时,我收到以下错误:
File "/usr/lib/freecad/Mod/drawingDimensioning/core.py", line 184, in <module>
FreeCADGui.addCommand('dd_help', helpCommand())
AttributeError: 'module' object has no attribute 'addCommand'
我已经尝试了许多针对此错误的修复程序,但找不到任何有效的解决方案。这与具有 FreeCADGui 作为依赖项的绘图尺寸有关吗?FreeCADGui 是否缺少 addCommand()?如果您知道另一种方法,请发表评论。
- 较新的 TechDraw 模块:
据我所知,这很有效(尽管功能比drawing_dimensioning少)。但是我不能从命令行使用模块 TechDrawGui。将 TechDraw 页面保存到 SVG 需要 TechDrawGui 模块。执行此操作时出现此错误:
File "/app/main_process.py", line 14, in <module>
import Part, Drawing, FreeCADGui, TechDrawGui
ImportError: Cannot load Gui module in console application.
但是,我可以毫无问题地导入 FreeCADGui 模块。导入和使用 TechDraw 模块似乎也不错。
谢谢阅读。如果你认为你有一种方法可以在页面上创建尺寸并从 python 中保存为 SVG,请告诉我!
解决方案
是的你是对的。在 docker 容器内运行 FreeCAD(或在没有 GUI 的情况下编译)时,工作台的许多需要 GUI 才能执行的功能将不可用。但是,您可以通过深入研究 FreeCAD 代码库来修复它们,在https://www.freecadweb.org/tracker/my_view_page.php上创建问题或使用 FreeCAD 的核心功能来解决您的问题。
关于您的问题,我有一个解决方案:https ://gist.github.com/amrit3701/8f67c8ea06c74a64bca08a0a48560556
上面的示例创建了一个立方体的 SVG 文件及其尺寸。为了创建尺寸,我使用Draft.makeDimension
了函数,而为了生成 Part 对象(即 Cube)的视图(SVG 内容),我使用了Drawing::FeatureViewPart
object。
main.py
在上述链接
ouput.svg中运行后输出 SVG 文件
推荐阅读
- performance - Libreoffice / openoffice 服务代理
- c# - 在 SQL Server Management Studio 中创建存储过程时出现语法错误
- watson-studio - 在 Watson Studio 中为 Visual Recognition 框检测标记数据时出错
- android - WebView 在 HTTPS url 上显示 net::ERR_CLEARTEXT_NOT_PERMITTED
- python - 在 os.path.join() 函数中包含通配符以创建文件路径
- android - Andriod Gradle Sync 离线模式失败
- python - 如何使用python从网站实时获取一些数据?
- office365 - 适用于 Web 应用程序的 Office 365 JSON 接口的文档
- amazon-web-services - 更新堆栈时使用现有的 DBUser 和 DBPassword 参数值
- cross-validation - 如何在 k-fold CV 设置中组织 Ray Tune Trainable 类计算?