很好用的FreeCAD

这篇博客介绍了如何使用FreeCAD进行自动化三维建模,特别是针对地下管道这类结构固定的对象。FreeCAD因其开源、支持Python二次开发和宏功能而显得尤为适合。通过实例展示了创建长方体和三棱柱的代码,强调了将几何形状分解为基本面并组合成体的概念。最后提出了从shape文件生成记事本,再用FreeCAD读取创建三维模型的思路,为三维管道建模提供了一条路径。
摘要由CSDN通过智能技术生成

我是在做地下管道三维建模的时候发现FreeCAD这款软件的。地下管道由于形状基本固定,大多数横截面都是圆形或者矩形,而且在原始数据采集的时候已经得到了管道中心线的三维位置和横截面大小,所以采用人工建模的方式不可取,更多的选择自动化三维建模。已经有不少自动化三维管道建模软件,但是要开发类似软件,很可能要求你对opengl等编程技术较为熟悉,开发的门槛相对较高。

我发现FreeCAD的二次开发非常的轻量化,API接口非常的简单灵活,支持传统的宏。FreeCAD本身是开源免费,全面支持python二次开发,而且宏这个经典技术支持你快速学习FreeCAD的每个功能和对应的接口。

举个例子,证明FreeCAD是简单好用有效的。

假如已经知道了一个长方体的8个顶点三维坐标,如何根据这些坐标生成一个长方体模型,并且导出为obj文件。

如果你对opengl之类的三维编程都很熟悉的话,这就是小菜一碟。

但是如果你没有三维编程的经验,那么使用FreeCAD就是一个很好的选择。

在FreeCAD的Macro菜单打开一个代码窗口,然后输入下面的代码:

import Part,PartGui
#获取当前打开的三维视图窗口
doc=App.activeDocument()
#定义8个顶点坐标
v1 = FreeCAD.Vector(16.618813566446693 , 125.22511113528816 , 0)
v2 = FreeCAD.Vector(17.74618643355331 , 126.87708886471185 , 0)
v3 = FreeCAD.Vector(17.74618643355331 , 126.87708886471185 , -1)
v4 = FreeCAD.Vector(16.618813566446693 , 125.22511113528816 , -1)
v5 = FreeCAD.Vector(17.847535837023013 , 124.38658400239477 , 0)
v6 = FreeCAD.Vector(18.97490870412963 , 126.03856173181846 , 0)
v7 = FreeCAD.Vector(18.97490870412963 , 126.03856173181846 , -1)
v8 = FreeCAD.Vector(17.847535837023013 , 124.38658400239477 , -1)
#创建长方体的第一个面
wire1=Part.makePolygon([v1,v2,v3,v4,v1])
face1 = Part.Face(wire1)
wire2=Part.makePolygon([v1,v2,v6,v5,v1])
face2 = Part.Face(wire2)
wire3=Part.makePolygon([v5,v6,v7,v8,v5])
face3 = Part.Face(wire3)
wire4=Part.makePolygon([v2,v3,v7,v6,v2])
face4 = Part.Face(wire4)
wire5=Part.makePolygon([v3,v4,v8,v7,v3])
face5 = Part.Face(wire5)
#创建长方体的第六个面
wire6=Part.makePolygon([v1,v4,v8,v5,v1])
face6 = Part.Face(wire6)
#六个面组成一个长方体
box=Part.makeShell([face1,face2,face3,face4,face5,face6])
solid=Part.makeSolid(box)
box = doc.addObject("Part::Box","mybox")
box.Shape=solid

然后执行这段代码,三维视图窗口中就会生成对应的长方体。

FreeCAD的菜单【File】/【Export】支持导出多种格式,当然包括obj格式了。

当然,三维世界里面各种形状的模型很多,长方体太简单了。但是只要有“点构成线,线构成面,面构成体”的基本思路,任何形状都不在话下;同时任何一个表面都可以看成是三角形的面组成的。所以,只要你能将模型分解成三角形的面,得到三角形的3个顶点,就是可以得到obj格式的三维模型的。

假如要创建一个三棱柱,已知6个顶点,可以使用下面的代码:

import Part,PartGui
#获取当前打开的三维视图窗口
doc=App.activeDocument()
#三棱柱的6个顶点
v1 = FreeCAD.Vector(18.83345034945586 , 123.52035588232494 , -0)
v2 = FreeCAD.Vector(20.650902699311487 , 124.35514145719087 , 0)
v3 = FreeCAD.Vector(20.768361311317285 , 124.02643845431146 , 0)
v4 = FreeCAD.Vector(18.83345034945586 , 123.52035588232494 , -0.173863699983499)
v5 = FreeCAD.Vector(20.650902699311487 , 124.35514145719087 , -0.173863699983499)
v6 = FreeCAD.Vector(20.768361311317285 , 124.02643845431146 , -0.173863699983499)
#三棱柱一共有5个面
wire1=Part.makePolygon([v1,v2,v3,v1])
face1 = Part.Face(wire1)
wire2=Part.makePolygon([v3,v1,v4,v6,v3])
face2 = Part.Face(wire2)
wire3=Part.makePolygon([v6,v3,v2,v5,v6])
face3=Part.Face(wire3)
wire4=Part.makePolygon([v5,v2,v1,v4,v5])
face4=Part.Face(wire4)
wire5=Part.makePolygon([v4,v5,v6,v4])
face5=Part.Face(wire5)
fan=Part.makeShell([face1,face2,face3,face4,face5])
solid=Part.makeSolid(fan)
box = doc.addObject("Part::Box","myfan")
box.Shape=solid

然后执行这段代码,三维视图窗口中就会生成对应的三棱柱。

最后提供一个三维管道建模的思路。

假如有了包含管道三维坐标的shape文件,可以先写程序生成一个记事本文件,文件内容包括每个顶点的三维坐标。这个程序可以使用任何你擅长的语言来实现。

然后在FreeCAD中写python代码读取记事本,然后生成三维模型,最后导出obj。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值