土木在线论坛 \ BIM技术 \ BIM专业软件 \ 优化:Dynamo根据构件坐标XY值排序

优化:Dynamo根据构件坐标XY值排序

发布于:2022-05-12 09:05:12 来自:BIM技术/BIM专业软件 1 4

来源:BIM的乐趣

|

作者:九哥BIMer

[复制转发]


 

    前一阵群里有个小伙伴咨询如何按XY坐标给桩编码,当时呢也没过多思考,就把常规的逻辑告诉他了,利用Dynamo自带的List.SortByKey节点,根据族放置坐标的XY值进行两次排序,就能实现这个需求,于是就简单写了个程序扔到了群里。

 

    不过正好最近自己有个类似的需求,发现这个方法逻辑上虽然通,但是用起来并不完美,总有个别位置编码错误。

    反复查看了编号错误的族,发现是因为族的坐标不论是X值还是Y值,是有一定偏差的,但是当按XY分别排序以后,这细小的偏差就会影响构件的编码顺序。

   
如果遇到个别族偏移距离过大了,而我又想让这个族按照相对的顺序去编码该怎么办呢?(如下图:)
 
     

没办法,只能自己重新写下程序了。

    本来想简单的连几个节点,发现还没没搞定,没办法只能寄希望于代码了,但是如果用代码,这个事反而就简单了,因为我们在学Python的时候,最基本的一个“冒泡法”相信大家都会,就是经常用来处理排序问题的,简单套用下 ,就能搞定这个问题。     

    通过冒泡法,写一个自定义函数,如下:














def zuobiaopaixu(a): b=[] l=len(a) for i in range(l): j=i for j in range(l):      if ((a[j].Location).X - (a.Location).X) >1000: a,a[j]=a[j],a      if ((a.Location).Y - (a[j].Location).Y) >1000: a,a[j]=a[j],a for k in range(len(a)): b.append(a[k]) return b
 

    上面这个函数,我们先解决了简单的按坐标排序问题,而且给了一个误差值。然后如果我们想要控制从上到下还是从左到右呢,可以对自定义函数进行优化,如下:






















def zuobiaopaixu(a,x,y,D): b=[] l=len(a) for i in range(l): j=i for j in range(l): if x == True: if ((a[j].Location).X - (a.Location).X) > D: a,a[j]=a[j],a if x == False: if ((a.Location).X - (a[j].Location).X) > D: a,a[j]=a[j],a if y == True: if ((a.Location).Y - (a[j].Location).Y) > D: a,a[j]=a[j],a if y == False: if ((a[j].Location).Y - (a.Location).Y) > D: a,a[j]=a[j],a for k in range(len(a)): b.append(a[k]) return b

    这里是通过输入两个布尔值来确定XY的排序方向,然后给一个可控的误差变量,就满足了现在排序需求。

 
 

当然,我这段代码是以房间为例的,如果你是想对别的图元按坐标排序,需要自己调整下获取Location的代码,这里就不过多赘述了~

 



  • 东方远方
    东方远方 沙发

    感谢,学习一下。

    2022-05-12 14:32:12

    回复 举报
    赞同0
评论帖子
评论即可得
+1经验值
+10土木币

请先 登录,再参与讨论!

这个家伙什么也没有留下。。。

BIM专业软件

返回版块

7988 条内容 · 177 人订阅

猜你喜欢

阅读下一篇

软件实操 Revit和Tekla的使用心得

近年来,BIM技术在我国建筑领域所发挥的作用日益显现。相应市面上的BIM软件也随之增多,Revit作为国内主流的BIM软件,因其强大的族功能,上手容易等深受建筑领域小伙伴们的喜爱。 而Tekla作为又一大BIM工具,做钢结构也确实是无敌。今天,就和大家聊一聊Revit与Tekla的区别以及这两大软件的一些使用心得! Revit最突出的特点就是设计信息数据一体化,这点在施工图设计当中非常有效;Revit可进行局部碰撞检查,如果临出图发现某个地方出错而需要修改很多张平、立、剖面时,只需要修改某一张图中的错误即可,大大提高了效率;

请选择删除原因

回帖成功

经验值 +10