• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. Reselect Items

Stats

  • Locked Locked
  • Replies 19
  • Subscribers 143
  • Views 18301
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Reselect Items

blankman
blankman over 14 years ago

Hi all, is it possible in skill to create a reselect tool, that would reselect any preselected number of objects in the event of deselecting by mistake? For instance, when doing complex stretches that involve carefully selecting only certain objects, it can be quite cumbersome when one looses the selection and has to go to the trouble of reselecting everything again. Thanks,

Brian.
  • Cancel
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    Brian,

    What version are you using?

    In IC61X you have this already in the layout editor under the Edit->Select menu (Save/Restore and Previous/Next set). The Options->Selection can be used to auto-store selection sets.

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 14 years ago

    Hi Andrew, sorry forgot to mention, im on IC5.1.415. Im thinking so could there be a way to store a selection set, and recall if needed. What do you reckon?

    Brian.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    Brian,

    Well, since you can get the selected set with:

    selSet=geGetSelSet()

    you could restore it by doing:

    foreach(obj selSet geSelectFig(obj))

    It's a bit more complicated if you want to handle partial selections though, as you'd need to use functions like geIsObjectPartiallySelected, and then geGetSelSetFigPoint - and then record for each object which points were selected - say in a list. Upon restore you'd have to use geSelectFigPoint to partially select the relevant vertices.

    Hopefully that gives you some pointers if you want to write the code.

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 14 years ago

    Thanks Andrew! Yeah that sounds like it should do the trick, i'll give it a go and see what I come up with. I'll repost here if I get it together or if i've any Qs..

    Thanks again,

     Brian.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 14 years ago

    Hi Andrew, heres a first draft. It works fine, however I noticed when I execute the second reselect function (BSreselectSelSet2) it crashes Cadence if the stored selected set has changed (ie deleted an object or object point). So I'm trying to add a search function just before the geSelectFig and geSelectFigPoint functions to account for this. Im using...

     leSearchHierarchy(geGetEditCellView() geGetEditCellView()~>bBox 0 "any shape" list(obj))

    ...however am not having much luck with the syntax of the command. Wondering what would be the best way to search a cellview for objects and object points for this purpose?

    Brian.

     

    procedure(BSstoreSelSet2()
        partselobjlist2=nil
        partselobjpointlist2=nil
        fullselobjlist2=nil
        foreach(fig geGetSelSet()
            if(geIsObjectPartiallySelected(fig nil) == t
                then    partselobjlist2 = cons( fig partselobjlist2 )
                            partselobjpointlist2 = cons( geGetSelSetFigPoint(fig) partselobjpointlist2 )
                else    fullselobjlist2 = cons( fig fullselobjlist2 )
            );if
        );foreach
        printf("Selection Set 2 stored\n")
    );procedure
    hiSetBindKey("Layout" "Ctrl Shift<key>KP_Down" "BSstoreSelSet2()")


    procedure(BSreselectSelSet2()
        geDeselectAll()
        partselobjpointlist2destruct=partselobjpointlist2
        foreach(obj fullselobjlist2 geSelectFig(obj))
        foreach(obj partselobjlist2
            geSelectFigPoint(obj car(partselobjpointlist2destruct))
            partselobjpointlist2destruct=cdr(partselobjpointlist2destruct)
        );foreach
        printf("Selection Set 2 selected\n")
    );procedure
    hiSetBindKey("Layout" "Ctrl<key>KP_Down" "BSreselectSelSet2()")

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    Try using dbIsId(obj) to check if the object is still valid?

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 14 years ago

    Yep, works a charm, but how then to go about checking for points on partially selected objects?

    Brian.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • dmay
    dmay over 14 years ago

    For a polygon or path, the nPoints attribute should be the same length as the list returned from geGetSelSetFigPoint. If the number of points has changed, then the partial list isn't valid anymore.

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 14 years ago

    Andrew/Derek, much thanks for your all your help! :) Finished code attached.

    Regards,

    Brian.

    store_sel_sets.il
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 14 years ago

    Andrew/Derek,

     

    One quick question. The above code uses the objects db number to store the selected object. This however changes regularly when editing the layout, leading to stored sets no longer being valid. Is there any way around this, maybe to lock the db number to the object to stop the change, or any other means of storing objects?

     

    Thanks,

    Brian.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
>

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information