百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

BIMBase之python建模宝典:弧线绘制

off999 2024-11-24 20:11 25 浏览 0 评论


BIMBase自从2021年发布以来获得了众多关心国产BIM和业务数字化转型的圈内老法师的关注,除了是国内首款完全自主知识产权的的BIMBase系统,实现建筑信息模型(BIM)关键核心技术自主研发安全可控。

同时开创了BIM X PYthon的技术跨界混搭风,得以让建模可以通过快速编程实现。


So!

BIMBase团队为了在功能和场景上

帮助大家了解BIMBase

学习建模小技巧

专栏【BIMBase之python建模宝典】

今日分享第五弹


原有弧线建模方式:

Arc()

新增弧线建模方式:

Arc(弧上三点)

arc_of_radius_points (起点-终点-半径)

arc_of_center_points (圆心-起点-终点)

arc_of_tangent_radius (位矢-半径-角度)

以陶立克柱为例,让我们一起了解下新接口的便利吧

本次建模案例难点主要在于柱身及柱脚的装饰线,其轮廓由大量的弧线连接组成

大致思路是将该柱分成柱脚和柱身两部分进行建模,最后将柱脚镜像得到柱头

话不多说,让我们开始教程吧


图文教程

玻璃幕墙建模

绘制柱身的装饰线截面

柱身的装饰线轮廓可以看成由最小单位装饰线圆弧和最小单位主体圆弧旋转阵列24次得到。

最小单位装饰线圆弧sArc的起始点和终点为小圆与主体圆的交点,可利用自定义的函数insec得到交点坐标。(这个函数后面也会整合到新版本中哦)。


最小单位主体圆弧bArc的起始点为sArc的终点,bArc的终点为旋转过一定角度的起始点。

已知圆弧上各点的坐标,使用BIMBase-Python弧线绘制的新接口显然更加方便。

对于最小单位装饰线圆弧sArc,已知弧上三点坐标,直接使用Arc函数装填圆弧上的三点完成绘制;

而对于最小单位主体圆弧bArc,已知弧上终点坐标、起点坐标和主体圆弧半径,使用art_of_radius_points函数装填起点-终点-半径即可完成绘制。

最后利用for循环将sArc和bArc多次阵列封闭,得到轮廓线arcLines。


1. def insec(p1, r1, p2, r2):

2. x = p1.x

3. y = p1.y

4. R = r1

5. a = p2.x

6. b = p2.y

7. S = r2

8. d = math.sqrt((abs(a-x))**2 + (abs(b-y))**2)

9. if d > (R+S) or d < (abs(R-S)):

10. print("Two circles have no intersection")

11. return

12. elif d == 0 and R == S:

13. print("Two circles have same center!")

14. return

15. else:

16. A = (R**2 - S**2 + d**2) / (2 * d)

17. h = math.sqrt(R**2 - A**2)

18. x2 = x + A * (a-x)/d

19. y2 = y + A * (b-y)/d

20. x3 = x2 - h * (b - y) / d

21. y3 = y2 + h * (a - x) / d

22. x4 = x2 + h * (b - y) / d

23. y4 = y2 - h * (a - x) / d

24. c1 = Vec2(x3, y3)

25. c2 = Vec2(x4, y4)

26. return c1, c2

27.

28. points = insec(Vec2(0, 0), R_body, Vec2(R_body, 0), r_body)

29. sPoint_sArc = points[1]

30. ePoint_sArc = points[0]

31. # 最小单位装饰线圆弧,采用弧上三点方式绘制。

32. sArc = Arc(sPoint_sArc, Vec2(R_body-r_body, 0), ePoint_sArc)

33. sPoint_bArc = ePoint_sArc

34. ePoint_bArc = to_vec2(rotz(fixedAngle)*sPoint_sArc) # Vec3强转Vec2

35. # 最小单位主体圆弧,可采用圆心-起点-终点或起点-终点-半径方式绘制。

36. # bArc = arc_of_center_points(Vec2(0, 0), sPoint_bArc, ePoint_bArc) # 有bug

37. bArc = arc_of_radius_points(sPoint_bArc, ePoint_bArc, R_body)

38. arcLines = []

39. for theta in linspace(0, 2*pi-fixedAngle, int(n)):

40. sArc_temp = rotz(theta)*sArc

41. bArc_temp = rotz(theta)*bArc

42. arcLines.append(sArc_temp)

43. arcLines.append(bArc_temp)



将柱身轮廓线arcLines装填入Section函数

作为截面,并将该截面沿着定义的Line路径

进行扫掠得到柱身body。


1. body = trans(0, 0, foot_height)*Sweep(Section(arcLines),

2. Line(Vec3(0, 0, 0), Vec3(0, 0, H_body)))




绘制柱脚基础。使用Cube函数即可得到基础base。

1. base = trans(-foot_length/2, -foot_length/2) * \

2. scale(foot_length, foot_length, h1)*Cube()



绘制柱脚装饰线截面,装饰线的圆弧有三段。

用arc_of_tanget_radius函数装填位矢-半径-角度绘制得到arc1;

用arc_of_radius_points函数装填起点-终点-半径绘制得到arc2;

用Arc函数装填弧上三点方式绘制得到arc3;

最后把各圆弧和各直线按顺序放入Section函数中即得到截面surbase_sec。

1. # 柱脚装饰线圆弧1,可采用位矢-半径-角度或圆心-起点-终点方式绘制。

2. arc1 = trans(R, d1) * \

3. arc_of_tangent_radius([Vec2(0, 0), Vec2(0, 1)], r1, pi/3)

4. # arc1 = arc_of_center_points(Vec3(R-r1, d1), Vec2(R, d1), Vec2((R-r1)+r1*cos(pi/3), d1+r1*sin(pi/3))) # 有bug

5. # 获取柱脚装饰线圆弧1的终点坐标,作为柱脚装饰线圆弧2的起点坐标。

6. arc1.pEnd = Vec2((R-r1)+r1*cos(pi/3), d1+r1*sin(pi/3))

7. # 柱脚装饰线圆弧2,采用起点-终点-半径方式绘制。

8. arc2 = arc_of_radius_points(arc1.pEnd, Vec2(R_body+r3, d1+h2), -r2)

9. # 柱脚装饰线圆弧3,采用弧上三点方式绘制。

10. arc3 = Arc(Vec2(R_body, d1+h2+d2), Vec2(R_body+r3,

11. d1+h2+d2+r3), Vec2(R_body, d1+h2+d2+h3))

12.

13. surbase_sec = trans(0, 0, h1)*rotx(pi/2) *\

14. Section(Vec2(0, 0), Vec2(R-r3, 0),

15. Vec2(R-r3, d1),

16. arc1, # 位矢-半径-角度弧

17. arc2, # 起点-终点-半径弧

18. Vec2(R_body, d1+h2),

19. arc3, # 三点弧

20. Vec2(R_body, d1+h2+d2+h3+d3), Vec2(0, d1+h2+d2+h3+d3))


将surbase_sec沿圆弧进行扫掠,

得到柱脚装饰线部分surbase,将柱脚装饰线与

柱脚基础进行combine得到柱脚foot。

1. surbase = Sweep(surbase_sec, Line(Arc()))

2. foot = Combine(base, surbase)



将柱脚foot通过mirror函数关于XOY平面进行镜像后,

沿z轴平移得到柱头。

1.chapiter = trans(0, 0, 2*foot_height+H_body)*mirror("xy")*foot

最后将柱身body、柱脚foot、柱头chpiter

通过Combine函数组合起来,

这样一根陶立克柱就完成啦。

self['陶立克柱'] = Combine(body, foot, chapiter).color(1,1,1,1)

在绘制柱脚和柱身时,我们用到了各种新“姿势”来绘弧


方法总结如下:

三点

起点-终点-半径

圆心-起点-终点

位矢-半径-角度


相比最初的单位圆弧绘制方式,新增方式可以更加方便的绘制“奇奇怪怪”的弧线,来快速实现行业者们的brainstorming啦

相关推荐

xpsp2系统下载地址(windows xp sp2 iso)

WindowsXPProfessionalSP2产品密钥是微软公司的一个软件密钥,用于授权用户使用该软件的完整功能。它通常与产品许可证一起使用,用于确保软件的合法性和安全性。使用Windows...

开机microsoft登录不上

1、系统问题:如果系统版本比较低,可能会由于旧系统存在某些BUG未修复或业务功能未优化,使手机在使用APP等应用过程中出现卡的情况,建议更新到最新的ios系统使用。2、内存问题:如果内存比较小,在运行...

如何取消win10开机密码(如何取消win10开机密码账户登录)

取消Windows10的开机密码可以通过以下方法进行操作:方法一:使用用户账户设置1.打开“开始”菜单,点击“设置”图标。2.在设置窗口中,点击“帐户”选项。3.在左侧菜单中,选择“登录选项”。4....

免费解压文件的软件(免费解压文件的软件电脑)

1、快压快压(kuaizip)是一款非常流氓的压缩和解压缩软件,一款免费、方便、快速的压缩和解压缩利器,拥有一流的压缩技术,是国内第一款具备自主压缩格式的软件。快压自身的压缩格式KZ具有超大的压缩比和...

无线usb网卡插上去没有反应(为什么usb无线网卡插上去没反应)

当出现电脑无法识别无线网卡的情况时,是简单的方法就是将无线USB网卡插到电脑后置USB接口上,以保证供电的充足。当然如果是偶然出现无法识别的情况,建议重启一下电脑试试。启用USB无线网卡驱动:右击“计...

怎么登录自己家的路由器(怎么登录自己家的路由器账号)

登陆家里的路由器方法:1、先查看ip,方法:win+r---输入:cmd---在再黑白界面输入:ipconfig,按回车。2、根据网关查看路由器地址。若网关是:192.168.2.1,那么路由器的ip...

linux操作系统安装步骤(linux系统详细安装步骤)

1.选择“中文(简体)”,然后点击“安装Ubuntu”。2.点击“继续”。3.然后点击“现在安装”。4.选择地址的时区,然后点击“继续”。5.选择“汉语”,然后点击“继续”。6.输入用户的名字。7.设...

苹果手机怎么设置定时关机(苹果手机怎么设置定时关机重启)

苹果手机可以设置定时关机,但无法设置定时开机。具体操作步骤如下:进入苹果手机自带的时钟。点击屏幕有下角的计时器。点击画面中间的计时结束启用选项。选择画面最下方的“停止播放”。之后再点击画面右上角的设定...

无线网wifi密码忘记了怎么办

忘记wifi密码后,可以在路由器后台查看。1.在浏览器的地址栏中,输入路由器上的管理地址,进入后台界面;2.在后台界面里,找到“无线设置”选项,点击它;3.在新界面里,点击wifi密码右侧的小眼睛图标...

win7系统无法正常开机怎么办
win7系统无法正常开机怎么办

解决方法如下1,出现无法启动的原因,要注意是开机启动不了,还是在进度条那里缓冲,过不去.如果是开机启动不了,那就要看一下内存条、电源等有没有问题?如果是在进度条那里,那就看下方的三种方法。2,第一种方法:1,开机按F8键.2,选择最近一次的...

2025-11-16 07:51 off999

现在装win7还需要激活吗(现在安装win7旗舰版还需密钥吗)

要激活  Windows7如果是预装在计算机中的,买来之后便不用激活,这里预装指的是在厂商那里。正版的Windows7安装到计算机中,有三十天的试用期,若要永久使用,就要使...

2025显卡性能排行榜天梯图(2020年显卡性能天梯图)

MacBookPro的显卡水平处于笔记本独立显卡Nvidia920M和940M之间。属于低端显卡级,玩玩LOL啥的还可以,其他的大型游戏就算了,MAC不适合打游戏。MacBookPro搭载的8代...

网络对时服务器(对时服务器端口)

对等网是指在网络中所有计算机的地位都是平等的,既是服务器也是客户机,所有计算机中安装的都是相同的单机操作系统如Windows98/XP/Vista/7等,它可以设置共享资源,但受连接数限制,一般是只允...

如何强制删除u盘文件(强制删除u盘内容)

1、电脑上下载安装安全杀毒类软件。2、使用强力卸载。3、找到U盘上需要卸载的文件,右击强力卸载可以卸载顽固型文件。4、被暂用的文件也删除不了可以退出U盘重启电脑重新开机插入U盘进行删除。5、不能删除的...

directx官方下载win7(directx download)

点开始-----运行,输入dxdiag,回车后打开“DirectX诊断工具”窗口,进入“显示”选项卡,看一下是否启用了加速,没有的话,单击下面的“DirectX功能”项中的“启用”按钮,这样便打开了D...

取消回复欢迎 发表评论: