讨论 --- 关于rs.OffsetCurve()函数的疑问

[复制链接]
跳转到指定楼层
26993 筑梦NARUTO 发表于 2015-10-25 15:52:00 楼主
本帖最后由 筑梦NARUTO 于 2015-10-26 11:16 编辑

一个多边形,使用rs.OffsetCurve()函数的时候,无法偏移负值距离。
代码如下:
  1. import rhinoscriptsyntax as rs

  2. obj = rs.GetObject("Select a curve", rs.filter.curve)

  3. if rs.IsCurve(obj):

  4.     A = rs.OffsetCurve( obj, [0,0,0], 10.0 )
  5.     B = rs.OffsetCurve( obj, [0,0,0], -10.0 )
  6.     print A,B
复制代码
B返回来是空值。如图


然后我用GHpython调用rhinocommon写了个offset,是可以偏移负值的,想问问jorin大大这个是为什么?是不是rs.OffsetCurve()函数的bug?


GHPYTHON中的代码:
  1. import Rhino as r
  2. style = r.Geometry.CurveOffsetCornerStyle.Sharp
  3. plane = r.Geometry.Plane.WorldXY
  4. tolerance = r.RhinoDoc.ActiveDoc.ModelAbsoluteTolerance

  5. a = plot.Offset(plane,f,tolerance,style)
复制代码


rhino和GH文件都上传了。提前谢谢解惑


offset问题.zip

16.22 KB, 下载次数: 60

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
关于大陆地区Rhino原厂培训中心
Jorin 发表于 2015-10-27 20:06:15
2
这并不是 rs.OffsetCurve() 函数的 bug,而是 rhinocommon 的 BUG:
rhinocommon 中曲线的偏移方法有两种,如图:


你用的是第一种,没有 BUG,rhinoscriptsyntax 中用的其实是第二种方式


如果用第二种,即便你使用的 Rhinocommon,当值为负值的时候,依然无法偏移。


如图,两个偏移方向都为正时,可以正常偏移:




有一个方向为负时,只能偏移正值的那一个:



CrvOffsetTest.gh

6.12 KB, 下载次数: 53

 楼主| 筑梦NARUTO 发表于 2015-10-27 20:21:57
3
本帖最后由 筑梦NARUTO 于 2015-10-27 20:24 编辑

感谢jorin大大解答,明白了。
这里补充一下mcneel官网clement用户提供的解决方案。
  1. import Rhino
  2. import rhinoscriptsyntax as rs

  3. def OffsetRectangle():
  4.     id = rs.GetObject("crv", 4, True, False)
  5.     if id:
  6.         plane = rs.CurvePlane(id)
  7.         point = rs.XformCPlaneToWorld([10000,10000,0], plane)
  8.         crv_1 = rs.OffsetCurve(id, point, 10.0, plane.ZAxis)
  9.         ac = rs.CurveAreaCentroid(id)
  10.         crv_2 = rs.OffsetCurve(id, ac[0], 10.0, plane.ZAxis)

  11. OffsetRectangle()
复制代码



Jorin 发表于 2015-10-27 20:32:35
4
本帖最后由 Jorin 于 2015-10-27 20:38 编辑

不过从纯 Rhinocommon 开发的角度讲这也不算是个 BUG,毕竟在相对底层的 Rhinocommon 中多重直线和多重曲线根本就不属于同一个类,要在不属于此类的对象上使用这个类的方法也是需要写程序的人考虑的问题。
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则