NCF参数化建筑论坛

标题: RhinoPython一键标注闭合多重直线 [打印本页]

作者: 月之眼    时间: 2018-10-19 19:29
标题: RhinoPython一键标注闭合多重直线
前段时间在rhino官网回答一个问题,写的一键标注闭合的多重直线,分享一下代码
代码运行结果:
[attach]50664[/attach]

代码:
  1. #coding=utf-8
  2. #月之眼
  3. import rhinoscriptsyntax as rs
  4. import scriptcontext as sc
  5. import Rhino

  6. def GetOffsetMidpoints(pl_ID,dist,plane):
  7.     #get offset figure and offset points
  8.     bb=rs.BoundingBox(pl_ID)
  9.     xform=rs.XformScale(1.1,(bb[0]+bb[2])/2)
  10.     bb=rs.PointArrayTransform(bb,xform)
  11.     pl=rs.coercecurve(pl_ID)
  12.     sharp=Rhino.Geometry.CurveOffsetCornerStyle.Sharp
  13.     off_pl=pl.Offset(bb[2],plane.Normal,dist,sc.doc.ModelAbsoluteTolerance,sharp)
  14.     if off_pl:
  15.         segs=off_pl[0].DuplicateSegments()
  16.         mids=[(seg.PointAtStart+seg.PointAtEnd)/2 for seg in segs]
  17.         return mids
  18.    
  19. #closed planar polyline filter
  20. def pl_filt(rhino_object, geometry, component_index):
  21.     return rs.IsPolyline(geometry) and rs.IsCurveClosed(geometry) and rs.IsCurvePlanar(geometry)

  22. def DimClosedPolylines2():
  23.     pl_IDs=rs.GetObjects("选择要标注的闭合多重直线",4,preselect=True,custom_filter=pl_filt)
  24.     if not pl_IDs: return
  25.     dist=rs.GetReal("标注偏移距离?",5,0)
  26.     if dist is None: return
  27.    
  28.     rs.EnableRedraw(False)
  29.     for pl_ID in pl_IDs:
  30.         verts=rs.PolylineVertices(pl_ID)
  31.         opts=GetOffsetMidpoints(pl_ID,dist,rs.CurvePlane(pl_ID))
  32.         if opts:
  33.             #checksum in case offset went wrong
  34.             if len(opts)+1==len(verts):
  35.                 for i in range(len(verts)-1):
  36.                     #
  37.                     dimStyle_name = "月之眼"+str(i)
  38.                     dimStyle = rs.AddDimStyle(dimStyle_name)
  39.                     dim = rs.AddAlignedDimension(verts[i],verts[i+1],opts[i],dimStyle)
  40.                     rs.DimStyleTextHeight(dimStyle,30)
  41. DimClosedPolylines2()

复制代码



作者: 蓝绝    时间: 2020-7-28 22:54
请问楼主这个能加入一个四舍五入进去吗
作者: 蓝绝    时间: 2020-7-28 23:03
请问楼主这个能加入一个四舍五入进去吗
作者: 月之眼    时间: 2020-10-17 12:37
蓝绝 发表于 2020-7-28 22:54
请问楼主这个能加入一个四舍五入进去吗

那数据生成之后,加个round()函数就行了。




欢迎光临 NCF参数化建筑论坛 (http://bbs.ncf-china.com/) Powered by Discuz! X3.2