如何获取FreeCAD中Body或Part所属的基准平面名称?
FreeCAD脚本获取Body/Part基准平面的方法
不用纠结自动生成的Origin、基准平面带后缀的命名,直接通过对象属性关联就能稳定获取,具体步骤如下:
核心思路
每个Body或Part对象都自带Origin属性,不管它的显示名称是Origin008还是其他,直接通过body.Origin或part.Origin就能拿到基准集合。Origin的Features列表包含了所有内置的基准轴和基准平面,只需遍历筛选即可。
代码示例
PartDesign工作台Body的情况
import FreeCAD as App # 创建或激活文档 if App.ActiveDocument is None: doc = App.newDocument() else: doc = App.ActiveDocument # 创建Body body = doc.addObject('PartDesign::Body', 'CustomBody') doc.recompute() # 获取Body的Origin基准集合 origin = body.Origin # 遍历筛选所有基准平面 target_planes = [] for feature in origin.Features: # 通过类型ID判断是否为PartDesign基准平面 if feature.TypeId == 'PartDesign::Plane': target_planes.append(feature) print(f"已识别基准平面:{feature.Name}") # 选择XZ平面创建草图 xz_plane = next((p for p in target_planes if p.Name.startswith('XZ_Plane')), None) if xz_plane: # 创建草图并附着到XZ平面 sketch = body.newObject('Sketcher::SketchObject', 'SketchOnXZ') sketch.Support = (xz_plane, ['']) sketch.MapMode = 'FlatFace' doc.recompute()
Part工作台Part对象的情况
如果是Part工作台创建的Part对象,基准平面的类型ID是Part::Plane,调整判断逻辑即可:
import FreeCAD as App doc = App.newDocument() part = doc.addObject('Part::Part', 'CustomPart') doc.recompute() origin = part.Origin target_planes = [] for feature in origin.Features: if feature.TypeId == 'Part::Plane': target_planes.append(feature) # 后续创建草图的逻辑类似
关键说明
- 完全避开自动命名的后缀问题,直接通过对象属性关联,兼容性更强
- 可以通过
feature.Name的前缀(如XY_Plane、XZ_Plane、YZ_Plane)精准定位所需平面,也可以通过feature.Label获取用户可见的显示名称 - 若需要区分基准轴和平面,基准轴的TypeId是
PartDesign::Line(Body)或Part::Line(Part)
内容的提问来源于stack exchange,提问作者user12642493
相关产品推荐
相关产品推荐

