+ Reply to Thread
Results 1 to 4 of 4

Thread: Polyline with Fillet corner

  1. #1

    Polyline with Fillet corner

    Basic question, so if I want to create a polyline with a fillet corner in python would the basic methodology be.

    define Curve1
    define Curve2
    use CurveFilletPoints() to find fillet arc points.
    define new Curve01 that start/stops at fillet point
    define new Curve02 that starts/stops at fillet point
    define arc with fillet points
    join 3 curves together

    or would you

    define Curve1
    define Curve2
    use CurveFilletPoints() to find fillet arc points.
    trim Curve1 at fillet point
    trim Curve2 at fillet point
    define arc with fillet points
    join 3 curves together


    Dennis

  2. #2
    Hi Dennis,

    here is a version of a polycurve fillet.

    I'm sure this could be done much simpler - but at least it's doing the job.

    best,

    Grischa


    Python Code:
      import rhinoscriptsyntax as rs
       
      def FilletCurve(crv01, crv02, radius=100):
         
          if rs.IsCurve(crv01) and rs.IsCurve(crv02):
              crv_fillet = rs.AddFilletCurve( crv01, crv02, radius )
              pts_fillet = rs.CurveFilletPoints( crv01, crv02, radius )
         
          if pts_fillet:
              return pts_fillet
             
      def FilletPolyLine(p_crv, radius):
         
          if rs.IsPolyline(p_crv):
              #check for layer and/or create new one
              if rs.IsLayer("Fillet_Curves")is False:
                  rs.AddLayer ("Fillet_Curves", (0, 255, 255))
              layer = rs.CurrentLayer ("Fillet_Curves")
             
              pts = []
              pts.append(rs.CurveStartPoint(p_crv))
             
              crvs = rs.ExplodeCurves(p_crv)
             
          if crvs: 
              for i in range(len(crvs) - 1):
                  pts_fillet = FilletCurve( crvs[i], crvs[i+1], radius )
                 
                  pts.append(pts_fillet[0])
                  pts.append(pts_fillet[1])
                 
          pts.append(rs.CurveEndPoint(p_crv))
         
          for i in range( len(pts) - 1):
              if i % 2 == 0:
                  rs.AddLine(pts[i], pts[i+1])
             
          rs.DeleteObjects(crvs)
         
         
      if ( __name__ == '__main__' ):
         
          #current layer name
          layer_current = rs.CurrentLayer()
         
          #get user inputs
          p_crv = rs.GetObject("select text curve", filter = rs.filter.curve)
          radius = rs.GetReal("Enter fillet raduis", number = 40)
         
          #function call
          FilletPolyLine(p_crv, radius)
         
          #reset current layer
          rs.CurrentLayer (layer_current)
    Last edited by Grischa; 08-07-2012 at 01:57 PM.

  3. #3
    Sweet. Thanks looking at it right now.

  4. #4
    Nice Script, I modified it a bit for closed polylines in grasshopper, as well in grasshopper and it works very well. The problem is when i have my polycurves ina datatree structure it gives me this eror:
    <Rhino.Geometry.PolylineCurve object at 0x00000000000023E1 [Rhino.Geometry.PolylineCurve]>

    Runtime error (TypeErrorException): Parameter must be a Guid or string representing a Guid
    Traceback:
    line 467, in coerceguid, "C:\Users\91hag\AppData\Roaming\McNeel\Rhinoceros\ 5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib\rhinoscript\utility.py"
    line 532, in coercecurve, "C:\Users\91hag\AppData\Roaming\McNeel\Rhinoceros\ 5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib\rhinoscript\utility.py"
    line 528, in CloseCurve, "C:\Users\91hag\AppData\Roaming\McNeel\Rhinoceros\ 5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib\rhinoscript\curve.py"
    line 29, in filletPolyLine, "<string>"
    line 96, in script

    Here is the first and second script, Any idea?


    import rhinoscriptsyntax as rs
    import Rhino as rc

    ####To creat DataTree:
    import clr
    clr.AddReference("Grasshopper")
    import Grasshopper as gh
    filletSections=gh.DataTree[rc.Geometry.Curve]()
    def angleBet(crv01,crv02):
    crv01Start=rs.CurveStartPoint(crv01)
    crv01End=rs.CurveEndPoint(crv01)
    crv02Start=rs.CurveStartPoint(crv02)
    crv02End=rs.CurveEndPoint(crv02)
    vec01=rs.VectorCreate(crv01Start,crv01End)
    vec02=rs.VectorCreate(crv02End,crv02Start)
    angle=rs.VectorAngle(vec01,vec02)
    return angle

    def filletCurve(crv01,crv02, radius):
    crv_fillet=rs.AddFilletCurve(crv01,crv02,radius)
    pts_fillet=rs.CurveFilletPoints(crv01,crv02,radius )

    if pts_fillet:
    return (crv_fillet,pts_fillet)

    def filletPolyLine(p_crv,radius=[]):
    pts=[]
    if rs.CloseCurve(polyCurve) :
    #pts.append(rs.CurveStartPoint(p_crv))
    print "yes"
    crvs=rs.ExplodeCurves(p_crv)
    listLen=len(crvs)
    crvs.insert(listLen,crvs[0])
    corRadius=radius[0]
    pts_fillet=filletCurve(crvs[listLen-1],crvs[listLen],corRadius)
    pts.append(pts_fillet[1][1])
    lines=[]
    if crvs:

    for i in range(len(crvs)-1):
    angle=angleBet(crvs[i],crvs[i+1])
    if (angle<=180) and (angle>=178):
    print i
    print angle

    else:
    if (len(radius))==1:
    corRadius=radius[0]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    else:
    corRadius=radius[i]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    else:
    pts.append(rs.CurveStartPoint(p_crv))
    crvs=rs.ExplodeCurves(p_crv)
    lines=[]
    if crvs:
    for i in range(len(crvs)-1):
    angle=angleBet(crvs[i],crvs[i+1])
    if (angle<=180) and (angle>=178):
    print i
    print angle
    else:
    if (len(radius))==1:
    corRadius=radius[0]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    else:
    corRadius=radius[i]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    print "Close curve"
    #pts.append(rs.CurveEndPoint(p_crv))


    for i in range(len(pts)-1):
    if i%2==0:
    line=rs.AddLine(pts[i],pts[i+1])
    lines.append(line)

    return lines
    a=filletPolyLine(polyCurve,y)

    Second one with Datatree structure:

    import rhinoscriptsyntax as rs
    import Rhino as rc

    ####To creat DataTree:
    import clr
    clr.AddReference("Grasshopper")
    import Grasshopper as gh
    filletSections=gh.DataTree[rc.Geometry.Curve]()
    def angleBet(crv01,crv02):
    crv01Start=rs.CurveStartPoint(crv01)
    crv01End=rs.CurveEndPoint(crv01)
    crv02Start=rs.CurveStartPoint(crv02)
    crv02End=rs.CurveEndPoint(crv02)
    vec01=rs.VectorCreate(crv01Start,crv01End)
    vec02=rs.VectorCreate(crv02End,crv02Start)
    angle=rs.VectorAngle(vec01,vec02)
    return angle

    def filletCurve(crv01,crv02, radius):
    crv_fillet=rs.AddFilletCurve(crv01,crv02,radius)
    pts_fillet=rs.CurveFilletPoints(crv01,crv02,radius )

    if pts_fillet:
    return (crv_fillet,pts_fillet)

    def filletPolyLine(p_crv,radius=[]):
    pts=[]
    if rs.CloseCurve(polyCurve) :
    #pts.append(rs.CurveStartPoint(p_crv))
    print "yes"
    crvs=rs.ExplodeCurves(p_crv)
    listLen=len(crvs)
    crvs.insert(listLen,crvs[0])
    corRadius=radius[0]
    pts_fillet=filletCurve(crvs[listLen-1],crvs[listLen],corRadius)
    pts.append(pts_fillet[1][1])
    lines=[]
    if crvs:

    for i in range(len(crvs)-1):
    angle=angleBet(crvs[i],crvs[i+1])
    if (angle<=180) and (angle>=178):
    print i
    print angle

    else:
    if (len(radius))==1:
    corRadius=radius[0]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    else:
    corRadius=radius[i]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    else:
    pts.append(rs.CurveStartPoint(p_crv))
    crvs=rs.ExplodeCurves(p_crv)
    lines=[]
    if crvs:
    for i in range(len(crvs)-1):
    angle=angleBet(crvs[i],crvs[i+1])
    if (angle<=180) and (angle>=178):
    print i
    print angle
    else:
    if (len(radius))==1:
    corRadius=radius[0]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    else:
    corRadius=radius[i]
    pts_fillet=filletCurve(crvs[i],crvs[i+1],corRadius)
    pts.append(pts_fillet[1][0])
    pts.append(pts_fillet[1][1])
    lines.append(pts_fillet[0])
    print "Close curve"
    #pts.append(rs.CurveEndPoint(p_crv))


    for i in range(len(pts)-1):
    if i%2==0:
    line=rs.AddLine(pts[i],pts[i+1])
    lines.append(line)

    return lines
    for i in range(len(polyCurve)):
    polyCurve0=polyCurve[i]
    print polyCurve0
    filletCur=filletPolyLine(polyCurve0,y)
    for j in range(len(filletCur)):
    filletSections.Add(filletCur[j],gh.Kernel.Data.GH_Path(i))
    a=filletSections

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts