BIMBase自从2021年发布以来获得了众多关心国产BIM和业务数字化转型的圈内老法师的关注,除了是国内首款完全自主知识产权的的BIMBase系统,实现建筑信息模型(BIM)关键核心技术自主研发安全可控。
同时开创了BIM X PYthon的技术跨界混搭风,得以让建模可以通过快速编程实现。
So!
BIMBase团队为了在功能和场景上
帮助大家了解BIMBase
学习建模小技巧
开设了技术专栏
【BIMBase之python建模宝典】
今日分享第九弹
今天分享的建模案例是风力发电机叶片。
风力发电机叶片是使风电发电机风轮旋转并产生气动力的部件,是水平轴风电发电机的核心部件之一。
建模思路
BIMBase风力发电机叶片
风力发电机叶片的外型是由一系列的标准翼型点进行坐标变换,再按照截面位置排布得到外形曲线,最后通过叶根向叶尖的放样,完成叶片造型。
由于风力发电机叶片截面线条数据点较多,故可采用numpy.loadtxt()获取和处理数据。
图文教程
BIMBase风力发电机叶片
① 获取翼型点数据
导入numpy模块,用loadtxt函数装填txt文件路径与参数usecols、comment,其中参数usecols表示仅导入0,1,2列,参数comment表示行的开头为“#”就会跳该行;新建空列表points、secs_points、secs、secs_height_temp、sec_height备用,定义num备用。
def replace(self):
data_txt = np.loadtxt('D:/风力发电机叶
片.txt', usecols=(0, 1, 2), comments='#')
points = []
secs_points = []
secs = []
secs_height_temp = []
secs_height = []
num = 35
② 初处理翼型点数据
data_txt是一个列表,包含了多个翼型点坐标。故对data_txt中元素进行遍历,将翼型点的xyz轴坐标通过append属性分装到列表point_x、point_y、point_z中;point_x和point_y通过Vec2函数转为二维坐标点,利用append属性,将xy二维坐标填入列表points中。
point_z直接通过append追加入列表secs_height_temp。
for i in data_txt:
point_x = i[0]
point_y = i[1]
point_z = i[2]
points.append(Vec2(point_x, point_y))
secs_height_temp.append(point_z)
③ 再处理翼型点数据
通过len函数获取points长度,使用range函数创建列表,步长为num;对上述列表进行遍历,把points[i:i+num]通过append属性装填入列表secs_points中,此时points[i:i+num]即为一个叶片截面上的翼型点的二维坐标,把secs_height_temp[i]通过append属性添加入列表secs_height中,此时secs_height_temp[i]即为对应叶片截面上的z轴坐标。
for i in range(0, len(points), num):
secs_points.append(points[i:i+num])
secs_height.append(secs_height_temp[i]
④ 叶片建模
用int对len(point)与num的除数向下取整,使用range函数进行遍历;在遍历过程中,将secs_point的点转化成Line装填入Section函数生成截面,同时将截面以translate方法进行排布,形成叶根、叶中、叶尖, 通过Loft函数装填截面,从叶根向叶尖进行放样,即可得到叶片blade,设置blade的属性smooth,使模型在线框模式下更加光滑、平整。
这样,一个风力发电叶片就完成了。
for i in range(int(len(points)/num)):
secs.append(trans(0, 0, secs_height[i])*
Section(Line(secs_points[i])))
blade = Loft(secs)
blade.smooth = True
self['风力发电机叶片'] = blade
在上述建模过程中,我们基于对numpy的应用,导入txt格式的数据文件完成了建模工作,希望这会对各位朋友有所启发。
以上就是风力发电机叶片的BIMBase-python的建模啦,敬请期待BIMBase-python更多建模案例的分享~
留言与评论(共有 0 条评论) “” |