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

Scripting deselection

$
0
0

@Willem wrote:

Hi,

The situation:
I want to create geometry on certain sub-curves of a polycurve.
What I would like to do is
1 - select the polycurve
2 - explode the curve
3 - let the user edit the selection of exploded subcurves (de-select/re-select)

Does anybody have an idea how to approach this?
Specifically I'm looking for a way to have a selection active and toggle selection from it by user pick.

I have it working but only blindly; I cannot have the current selection selected while in a rs.GetObjects()

EDIT:
Working with Displayconduit I got a little further:
Question now would be how to catch an object click/pick.
In other words how catch clicking on an object.

import rhinoscriptsyntax as rs
import scriptcontext as sc
import System.Drawing as SD
import Rhino

class DrawCurves(Rhino.Display.DisplayConduit):
    
    def __init__(self, curves):
        self.color = SD.Color.FromArgb(255 ,255, 0)
        self.curves = curves

    def DrawOverlay(self, e):
        #print 'drawing'
        for curve in [rs.coercecurve(curve) for curve in self.curves]:
            #curve.Translate(2,2,0)
            e.Display.DrawCurve(curve,self.color)



def EditSelection(selection):
    
    
    
    # filter to only select objects in selection
    def selFilter(rhino_object, geometry, component_index):
        return rhino_object.Attributes.ObjectId in selection
    
    new_selection = selection [:]
    conduit = DrawCurves(new_selection)
    
    while True:
        
        conduit.Enabled = True
        
        objs=rs.GetObjects("Toggle Objects",custom_filter=selFilter)
        
        
        if not objs: 
            break
            conduit.Enabled = False
        

        for obj in objs:
            if obj in new_selection: #delete from new_selection
                new_selection.pop(new_selection.index(obj))
            elif obj in selection: #add to new_selection
                new_selection.append(obj)

        
    conduit.Enabled = False
    return new_selection
    
def Test():
        
    polycrvs = rs.GetObjects('curves',filter=4)
    if not polycrvs: return
    
    exploded = rs.ExplodeCurves(polycrvs, delete_input=False)
    
    curves = EditSelection(exploded)
    
    rs.UnselectAllObjects()
    rs.SelectObjects(curves)
    rs.Sleep(500)
    rs.DeleteObjects(exploded)
    
Test()

Thanks
-Willem

Posts: 1

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 5892

Trending Articles