“为所有人免费提供CAD,让所有人...”或使用Python编写FreeCAD的第一步

也许您已经使用NanoCAD的示例了解了有关CAD编程第一步的注释。

应当指出,对于一个不懂编程的人,并且知道“电子罪犯”级别的CAD的人来说,这是一次了不起的冒险。 但是,NanoCAD仍然主要是商业产品。 它的免费版本大约六年没有更新,在开发机会方面已经过时了。

但是我真的想,就像在一个精彩的故事中一样: “所有人的幸福,徒劳无礼,不要让任何人发怒!” 。 因此,决定听从DrZugrik战友的建议并自己安装FreeCAD。

因此,在紧追中,我正在为您编写材料,在短短一天之内,我学会了如何与Anaconda成为该CAD软件的朋友,用Python编写了一个简单的脚本,该脚本用文本绘制了一个小方块,并对其进行了测试,可在Windows和Linux上使用。 我实际上已经准备好逐步和告诉您什么,以便您也可以做到这一点。

是否想了解Python和FreeCAD的迷人之处? 那么,在猫之下,欢迎您。




内容:

第一部分:简介。
第二部分:标准安装和第一个样本
第三部分:现在与Anaconda结交FreeCad朋友
第四部分:编写一个简单的库
第五部分:结论

第一部分:简介


奇怪的是,在哈布雷(Habré)上很少有专门针对FreeCAD的出版物, Eddy_Em发表了一篇很好的文章“ Meet:FreeCAD” ,并在其中多篇文章中提及了本文的主人公。

首先,关于程序只有两个字。 我不会重复来自官方网站的信息,而只是粗略地描述了为什么我将注意力转向此CAD。

因此,FreeCAD是一个开源的计算机辅助设计系统,主要侧重于三维参数化建模。 在撰写本文时,该程序的最新版本是0.18.3。 不要混淆发行版号的值不等于1。 FreeCAD长期存在并积极开发,目前功能非常强大。 而且,据我长期了解,它在参与3D建模和打印的人们中具有一定的知名度,特别是在对开源/开放式硬件以及各种DIY感兴趣的自以为是的思想家中。

但是,如果突然之间您根本不了解3D建模,那么这并不是绕过FreeCAD的理由。 CAD功能分为特定的模块-工作台,其中包含通常的2D工程图,其中包括用于装饰图纸框架的工作台,甚至包括用于实现BIM概念的工作台。

实际上,该程序有一个“马车和一个小推车”,但是今天我们将尝试做一些完全原始的事情,只是为了“提高食欲”。


第二部分:标准安装和第一个样本


FreeCAD可用于所有三种常见的操作系统,但是由于我没有使用“ Apple”技术,因此我们将仅考虑Windows 10和Linux Mint的选项。

开始为FreeCAD编程的最简单方法是下载分发包并以操作系统的标准方式安装它。 在这种情况下,我们将可以使用预先安装了该程序的Python解释器(在编写Python文章版本3.6.6时)。

要开始为FreeCAD编程,可能甚至比NanoCAD或AutoCAD更加容易,只需打开“视图”选项卡->“面板”->,然后打开Python控制台。 实际上,仅此而已,您就可以安全地进行编程了。

但是首先,让我们尝试使用常规方法绘制一些东西。 例如,一个圆圈。
注意控制台输出

Gui.activateWorkbench("DraftWorkbench") >>> App.newDocument("") >>> App.setActiveDocument("____________________") >>> App.ActiveDocument=App.getDocument("____________________") >>> Gui.ActiveDocument=Gui.getDocument("____________________") >>> Gui.activeDocument().activeView().viewDefaultOrientation() >>> import Draft >>> pl=FreeCAD.Placement() >>> pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) >>> pl.Base=FreeCAD.Vector(-1.0610677003860474,-0.31207874417305,0.0) >>> circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) >>> Draft.autogroup(circle 



FreeCAD并不隐藏任何东西,绘制圆的所有关键操作都显示在控制台中。 现在,您甚至可以只复制代码并在右边稍微画一个圆。
让我们尝试输入一个变量并绘制另一个圆,为此,我们将复制控制台输出并逐行插入进行一些小的修改。

 x=-1.0610677003860474 pl=FreeCAD.Placement() pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) pl.Base=FreeCAD.Vector(x*5,-0.31207874417305,0.0) circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) 

如您现在所见,有两个圆,并且按计划,第一个圆的基点x坐标的右边乘以5。




第三部分:现在与Anaconda结交FreeCad朋友


但是,CAD的功能不限于作为“保管员”的标准用法。 使用该API,FreeCAD可以嵌入到您自己的程序中,并且可以使用图形界面,也可以不使用图形界面,但是我们将在其他时间讨论此问题。

同时,想象一下这种情况,假设您喜欢使用Python进行机器学习和数据分析,并且已经安装了Anaconda分发工具包 ,那么您可能会非常高兴地得知,由于conda-forge的帮助,您可以将这个分发工具包和FreeCAD的所有功能结合在一起。

链接提供了有关使用mini-conda时如何安装的指南,我们将通过其导航器将其安装在完整的“ Anaconda”中。

因此,打开Anaconda-Navigator,转到“ 环境”选项卡,然后单击“ 创建”按钮创建一个新环境。 环境的名称,您可以给任何名字,我叫-“ freecad”。 我们选择必要的Python版本并创建一个新环境。



但这还不够,您需要添加conda-forge频道,只需在单击“ 添加”按钮后即可显示字段,并让系统更新软件包列表。



现在几乎准备就绪,可以自行安装FreeCAD

单击软件包名称上的LMB,然后选择我们要安装的版本,如下图所示(我已经安装了它)



经过冗长的等待之后,您将安装FreeCad发行软件包,只需启动所需的版本。

在最简单的情况下,如果没有启动参数,则需要使用我们的环境启动conda控制台,并使用同名的FreeCAD命令启动CAD。



一个空的FreeCAD窗口将打开,我们在其中选择一个用于二维图形的工作台。



如您所见,现在的Python版本与标准安装完全不一样。


让我们创建一个新文档(Control + N),它将对测试我们的迷你库非常有用。


第四部分:编写一个简单的库


我们的库将是原始的。 本质上,我们将创建一个命令,该命令将绘制一个矩形,在该矩形中将输入用户指定的任意文本。

创建一个文件(我称其为“ drawhabr.py”) ,并将以下代码写入其中:

 #Simple lib for test Python API in FreeCad #Tested on Python 3.7. and FreeCad 0.18.3 #Designed for article - https://habr.com/ru/post/464113/ import FreeCAD, FreeCADGui, Part, Draft class stamp: "This class creates a rectangle with text. Coordinates are set by entering into the console." def __init__(self): self.view = FreeCADGui.ActiveDocument.ActiveView x=float(input("set x point ")) y=float(input("set y point ")) mtext=str(input("input text ")) self.drawstamp(mtext, x , y ) FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

或者您可以只从GitHub复制文件

该代码非常简单,但是我认为值得解释一些要点。

 import FreeCAD, FreeCADGui, Part, Draft 

我们导入必要的库,然后创建类。
由于尚未学习如何处理鼠标输入,因此我们将从键盘直接将对象和文本的坐标输入控制台。 这是通过标准的Python方法实现的。 然后,在类的构造函数中,我们调用函数(方法),这将全部绘制出来。

在类构造函数中FreeCAD的功能中,可以区分两个命令:

 self.view = FreeCADGui.ActiveDocument.ActiveView FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") 

第一个为我们选择活动工作区的空间,第二个在安装对象之后,在程序窗口的最底部(在灰色栏中,不要与Python控制台混淆)向我们写一条消息。

该方法的代码也很直观,但是我会解释其可靠性。

  def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" 

如果用户输入一个空字符串,则为必需。 否则,文本中将输入标签词,并且矩形的长度将不正确。
 point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) 


定义文本周围框架的当天基准点的坐标。
让我提醒您,数据是从输入到控制台的。

请注意,我们正在使用FreeCAD.Vector(x,y,z)形式的三维坐标,但是在此示例中,我们可以忽略Z坐标。 与框架旋转相关的其他参数没有接触。

 text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) 

使用Draft.makeText命令创建文本,并将您在控制台中输入的文本传递给它。

取得与框架基点略有偏移的坐标。

以一种很好的方式,有必要学习如何使用API​​参数来处理文本的框架(边界),然后基于该参数计算框架框架的宽度和高度。 但是由于我本人才刚刚熟悉该程序,所以我用工农的方法解决了这个问题。 我们将固定字体高度,为其指定等宽字体(Courier)的样式,并据此确定围绕文本绘制的框架的长度和宽度。

  text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" 

它仅能替代矩形绘制函数中的参数

 rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

实际上,仅此而已。

它仍然仅是连接我们的图书馆。 为此,您可以简单地将其复制到所选环境的其余Python库所在的文件夹中。

例如,对于Windows 10,该路径可能如下(从Anaconda的安装位置开始有意义):

C:\ Users \ YourUsernameName \ Anaconda3 \ envs \ freecad \ Lib

对于Linux,路径将如下所示:

/home/ourUserName/anaconda3/envs/freecad/lib/python3.7

所有剩下的加载我们的库。
为此,请首先在控制台中输入我们模块的名称(不带文件扩展名)

 import drawhabr 

然后调用类的构造函数

 drawhabr.stamp() 

这就是引导,函数参数和享受结果的全部。



为了以防万一,下面的屏幕快照确认了一切也可以在Linux上运行。




第五部分:结论


今天,我们在理解FreeCAD API的过程中仅走了很小的一步。
尽管我认为事实上,对于二维图形和项目开发,FreeCAD不像AutoCAD(NanoCAD)或其他常见的CAD系统那样熟悉,但编程起来要容易得多。

尽管缺少文档,并且需要用Wiki FreeCAD中的示例更新某些文章,但仍可以通过未经培训的人的力量来掌握其API并运行第一个程序,而他们几乎没有编写Python代码的知识。

考虑到开发人员并不贪心,甚至在必要时甚至允许在LGPL许可下使用FreeCAD并结合Python插件库的全部功能(例如,来自同一Anaconda分发工具包)来进行商业开发,因此使用FreeCAD进行程序开发看起来很有趣任务。
如果我了解到您对此主题感兴趣,我将尝试与Nanocad进行类比的微型笔记

Source: https://habr.com/ru/post/zh-CN464113/


All Articles