FreeCAD学习笔记——Units、Builtin modules和Workbench creation

本文深入解析了FreeCAD软件的核心功能,包括单位转换、内置模块介绍、工作台创建及命令定义,适合对FreeCAD感兴趣的初学者和技术人员阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Units

① 查看其他单位转换成系统标准单位:

>>> tu = FreeCAD.Units.parseQuantity
>>> tu('10 m')
10000 mm
>>> tu('3/8 in')
9.525 mm
>>> tu('2*pi rad')
360 deg
>>> tu('sin(pi)')
1.22465e-016 
>>> tu('200g')
0.2 kg
>>> tu('2 in')
50.8 mm

② 常见国际单位

类型符号
长度单位mm
重量单位kg
角度单位deg
时间单位s
二、Builtin modules

Builtin模块是主要的FreeCAD模块。 它们包含用于处理常规FreeCAD配置、文档及其内容的工具。

模块名作用
FreeCADFreeCAD的主要(根)模块,也可以通过FreeCAD解释器中的“App”调用。它包含操作文档及其对象所需的所有内容。
Base APIBase模块包含在FreeCAD模块中,包含FreeCAD中大量使用、不同类型的对象的构造函数
Vector API支持向量的add、cross、multiply、scale等操作
Matrix API4x4 矩阵在整个FreeCAD中随处可用
Console API该模块包含在FreeCAD模块中,包含将文本发送到FreeCAD输出控制台和状态栏的方法。
FreeCADGui API该模块与FreeCAD模块相对应,它包含与用户界面和3D视图相关的所有内容。
Selection APISelection 子模块是FreeCADGui模块的一部分
Placement API在FreeCAD中,Placement定义对象的位置和旋转。具体参考Placement中的Angle, Axis and Position
Document Object API作为参数,FreeCAD中的文档对象可以具有许多其他属性。这些属性是基本的,存在于每个FreeCAD文档对象中,只需按名称检索对象即可。比如Box对象的Length、Label、Placement
ViewObject API当GUI启动时,FreeCAD文档中的每个对象Object都有一个关联的ViewObject,它驻留在FreeCADGui文档中
>>> print FreeCADGui.Selection.getSelection()
[Mesh::Feature object at 00000190053A0AA0]
# 创建文档的对象,并打印对象的相关属性
>>> doc=App.newDocument("stu2")
>>> App.setActiveDocument("stu2")
>>> App.ActiveDocument=App.getDocument("stu2")
>>> Gui.ActiveDocument=Gui.getDocument("stu2")
>>> box=doc.addObject("Part::Box","box")
>>> doc.recompute()
1
>>> print box.PropertiesList
['AttacherType', 'AttachmentOffset', 'ExpressionEngine', 'Height', 'Label', 'Length', 'MapMode', 'MapPathParameter', 'MapReversed', 'Placement', 'Shape', 'Support', 'Width']
三、Workbench creation

工作台是FreeCAD命令的容器,用python、C ++或两者混合编码,这有利于将C ++的速度与python的灵活性结合起来。但是,在所有情况下,您的工作台将由一组两个python文件启动。创建方法: 你需要一个文件夹,你喜欢任何名字,放在Mod目录中。文件夹中需要包含Init.py文件,以及可选的InitGui.py文件。当FreeCAD以GUI的方式启动时执行Init.py文件之后立即执行InitGui.py文件。如果在控制台模式下启动,则不会执行InitGui.py文件。FreeCAD在启动时找到工作台并将工作台的内容添加到界面中。

② 在Init.py文件中,即使FreeCAD在控制台模式下工作,也只需添加一些内容,例如文件导入器和导出器

# Part/Init.py
FreeCAD.addImportType("BREP format (*.brep *.brp)","Part")
FreeCAD.addExportType("BREP format (*.brep *.brp)","Part")
FreeCAD.addImportType("IGES format (*.iges *.igs)","Part")
FreeCAD.addExportType("IGES format (*.iges *.igs)","Part")
FreeCAD.addImportType("STEP with colors (*.step *.stp)","ImportGui")
FreeCAD.addExportType("STEP with colors (*.step *.stp)","ImportGui")

③ 在InitGui.py文件中,您通常会定义一个工作台,其中包含名称,图标和一系列FreeCAD命令。该工作台还定义了FreeCAD加载时执行的功能(尽可能少地执行,不然会是启动速度变慢),工作台激活时执行的功能开发人员需要做大量工作的地方),工作台停用时执行的功能(这样你可以根据需要移除工件)。

使用C++编写工作台: 在使用C ++时,从尊重FreeCAD的一个基本规则开始:在App部分(可以在控制台模式下运行,没有任何GUI元素)和Gui部分之间分离工作台Gui部分只在FreeCAD以其完整的GUI环境运行时才会加载。开发C ++工作台时,实际上很可能会做两个模块:一个App和一个Gui两个模块当然必须可以从python中调用。任何FreeCAD模块(App或Gui)至少包含模块初始化文件

FreeCAD.addImportType()和addEXportType()函数允许您提供文件类型的名称和扩展名,以及负责导入的python模块。

使用python编写工作台:

# Mod/Mesh/InitGui.py
class MeshWorkbench (Workbench):
    "Mesh workbench object"
    def __init__(self):
        self.__class__.Icon = FreeCAD.getResourceDir() + "Mod/Mesh/Resources/icons/MeshWorkbench.svg"
        self.__class__.MenuText = "Mesh Design"
        self.__class__.ToolTip = "Mesh design workbench"

    def Initialize(self):
        import Mesh
        import MeshGui
        try:
            import flatmesh
            import MeshFlatteningCommand
        except ImportError as e:
            import FreeCAD
            FreeCAD.Console.PrintLog((str(e)))
    def GetClassName(self):
        return "MeshGui::Workbench"

Gui.addWorkbench(MeshWorkbench())

⑥ FreeCAD Command
FreeCAD命令是FreeCAD接口的基本构建块,它们可以展现为工具栏上的按钮,也可以展现为菜单中的菜单项。但它是同一个命令。命令是一个简单的python类,它必须包含一些预定义的属性和函数,包括定义命令的名称、它的图标以及激活命令时要执行的操作。

# Mod\Draft\DraftTools.py Line命令的部分代码
class Line(Creator):
    "The Line FreeCAD command definition"

    def __init__(self, wiremode=False):
        Creator.__init__(self)
        self.isWire = wiremode

    def GetResources(self):
        return {'Pixmap'  : 'Draft_Line',
                'Accel' : "L,I",  # 快捷键
         
                'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Line", "Line"),
                'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Line", "Creates a 2-point line. CTRL to snap, SHIFT to constrain")}

FreeCAD commands are the basic building block of the FreeCAD interface. They can appear as a button on toolbars, and as a menu entry in menus. But it is the same command. A command is a simple python class, that must contain a couple of predefined attributes and functions, that define the name of the command, its icon, and what to do when the command is activated.

### 内置FIFO与Block RAM的硬件设计及FPGA实现差异 #### 功能定义 内置FIFO(First-In-First-Out)是一种数据缓冲结构,主要用于处理不同速率的数据流传输。它通过存储释放数据来平衡输入输出速度差[^2]。而Block RAM是FPGA中的专用存储模块,通常用于实现各种类型的内存功能,如单端口RAM、双端口RAM以及ROM等。 #### 资源利用 Block RAM在FPGA中是一个固定的硬件资源,其容量性能由具体器件决定。当使用Block RAM作为存储单元时,可以自动推断出所需的RAM配置,例如深度、宽度其他参数[^1]。然而,对于内置FIFO来说,由于其实现机制较为复杂,并且涉及额外的功能控制逻辑(如满信号、空信号),因此无法完全依赖综合工具进行自动推断,需手动实例化IP核或调用库函数完成设计。 #### 性能对比 从延迟角度来看,简单的Block RAM读写操作具有较低延时特性,适合于那些对时间敏感的应用场景。相比之下,虽然内置FIFO也提供了快速访问能力,但由于增加了状态管理电路等因素影响,整体可能会稍逊一筹。另外,在某些特定条件下比如浅度高带宽需求下,移位寄存器形式的FIFO可能被采用,但这会消耗较多LUT资源而非专门针对优化过的BRAM单元。 #### 配置灵活性 就可配置选项而言,两者各有千秋。Block RAM允许灵活调整字长(bit/byte level),并推荐采用双端口模式以提高吞吐量;而对于标准型式的Built-in FIFO组件,则预先设定了多种常用规格供开发者选用,简化了定制过程的同时牺牲了一定程度上的自由度。 ```python # Example of instantiating a built-in FIFO using XPM library in VHDL library ieee; use ieee.std_logic_1164.all; entity fifo_example is port ( rst : in std_logic; -- Reset signal wr_clk : in std_logic; -- Write clock rd_clk : in std_logic; -- Read clock din : in std_logic_vector(7 downto 0); -- Data input wr_en : in std_logic; -- Write enable rd_en : in std_logic; -- Read enable dout : out std_logic_vector(7 downto 0); -- Data output full : out std_logic; -- Full flag empty : out std_logic -- Empty flag ); end entity fifo_example; architecture rtl of fifo_example is begin your_fifo_instance_name : YOUR_FIFO_COMPONENT_NAME generic map( -- Map generics here as needed based on component requirements. ) port map ( -- Port mappings go here according to the instantiated IP core ports. ); end architecture rtl; ``` 上述代码片段展示了如何基于Xilinx Parameterized Macro (XPM) 库创建一个VHDL版本的基本FIFO实体声明及其架构描述部分框架示意。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值