Quantcast
Channel: Scripting - McNeel Forum
Viewing all articles
Browse latest Browse all 5804

[Help] How to draw line segments while picking the points

$
0
0

@ivelin.peychev wrote:

Hi,

First a small complain, RhinoCommon, RhinoPython, and the other APIs are really not helpful for beginner programmers. Same goes for the examples. Very few comments not really explaining what is going on.

Now on the point. Can anyone explain, please…
How can I make the code below draw the line segments between the points while I’m creating them? I am getting its length after all.
Please excuse me for the useless lines, I’m trying to understand how it all works.

import Rhino
import scriptcontext

def zPolyline():
    # For this example we will use a GetPoint class, but all of the custom
    # "Get" classes support command line options.
    gp = Rhino.Input.Custom.GetPoint()
    gp.SetCommandPrompt("GetPoint with options")

    # set up the options
    intOption = Rhino.Input.Custom.OptionInteger(1, 1, 99)
    dblOption = Rhino.Input.Custom.OptionDouble(2.2, 0, 99.9)
    boolOption = Rhino.Input.Custom.OptionToggle(True, "Off", "On")
    listValues = "Item0", "Item1", "Item2", "Item3", "Item4"
    # set up options' defaults
    gp.AddOptionInteger("Integer", intOption)
    gp.AddOptionDouble("Double", dblOption)
    gp.AddOptionToggle("Boolean", boolOption)
    listIndex = 3
    list = Rhino.Collections.Point3dList
    # WHA?
    opList = gp.AddOptionList("List", listValues, listIndex)
    pl = Rhino.Geometry.Polyline()
    while True:
        # perform the get operation. This will prompt the user to
        # input a point, but also allow for command line options
        # defined above
        for i in range(0,5):
            get_rc = gp.Get()
            #if you don't comply with the next if loop keep the command open
            if gp.CommandResult()!=Rhino.Commands.Result.Success:
                return gp.CommandResult() 
            #the if loop that completes the command
            if get_rc == Rhino.Input.GetResult.Point:
                
                point = gp.Point()
                scriptcontext.doc.Objects.AddPoint(point)
                scriptcontext.doc.Views.Redraw()
                #print "Command line option values are"
                #print " Integer =", intOption.CurrentValue
                #print " Double =", dblOption.CurrentValue
                #print " Boolean =", boolOption.CurrentValue
                #print " List =", listValues[listIndex]
                print "x= ",point.X,", y= ",point.Y,", z= ",point.Z
                pl.Add(point.X,point.Y,point.Z)
                print pl.Length
                #print list
                
                
                # 
            elif get_rc==Rhino.Input.GetResult.Option:
                if gp.OptionIndex()==opList:
                    listIndex = gp.Option().CurrentListOptionIndex
                    Rhino.Geometry.Polyline(list)
                    
                continue
        break
    return Rhino.Commands.Result.Success


if __name__ == "__main__":
    zPolyline()

I know I have a lot to learn, but still reusing pieces of code should be relatively easy. Replacing a thing or two. If a Line requires two points and can be defined as Line(startPt,endPt), then why can’t a Polyline be defined from a list like Polyline(list)? It requries point3dlist, ok, but when I add a point to it as point3dlist.Add(pt.X,pt.Y,pt.Z) it slaps me in the face with an error that there’s one more argument to be given. According to the api this should be “self”… :face_with_symbols_over_mouth: What is going on?

Thanks in advance.

EDIT: Is there plan in the future to abandon pythonscript and stick only with RhinoCommon, because in many examples both are used and this adds to the confusion.

Posts: 5

Participants: 3

Read full topic


Viewing all articles
Browse latest Browse all 5804

Trending Articles