![]() |
【转帖】saving assembly selection se
saving assembly selection set
hi could someone give me an example or pointers for working through selected components using vb6 api. i'm having difficulty after the first run through my code as the selection is lost. (i want to work on each selected component in turn) i grab the count with swselmgr.getselectedobjectcount then get the first selected part with swselmgr.getselectedobjectscomponent2(i) but now i've lost the selection and so cannot just increment (i) anymore. what is the best method for saving this selection set so i can come back to it ? thanks rich the first thing to do try would be to avoid using code that changes the current selection set. however, that's obviously not possible in every case, and i'm pretty sure not possible in your case since you're posting about it. i think the best thing to do would be to put everything that's currently selected into collections of objects. here's a function i wrote a while back to do just that. it's part of a macro to enable saving and restoring of selection sets. this code was on a form, so a good portion of it can be gotten rid of. if you want to see the entire macro let me know and i can try to post it. one thing to note - before you try to use any of the objects in the collections, check their issafe property since it's possible that something you did made a face disappear. note that this code saves faces, edges, vertices, etc. if you really just want all the components that are selected, use getselectedobjectscomponent as you were doing, but put the components into a collection before processing, then iterate through the collection. sub savesels(badd as boolean) dim i as long if not badd then me.labfacecount.caption = "0" me.labmissingfaces.caption = "0" me.labedgecount.caption = "0" me.labmissingedges.caption = "0" me.labvertcount.caption = "0" me.labmissingverts.caption = "0" me.labplanescount.caption = "0" me.labmissingplanes.caption = "0" set myfacecoll = new collection set myedgecoll = new collection set myvertcoll = new collection set myplanecoll = new collection end if for i = 1 to swselmgr.getselectedobjectcount if swselmgr.getselectedobjecttype3(i, -1) = swselfaces then set myent = swselmgr.getselectedobject6(i, -1) myfacecoll.add myent.getsafeentity me.labfacecount.caption = me.labfacecount.caption + 1 elseif swselmgr.getselectedobjecttype3(i, -1) = swseledges then set myent = swselmgr.getselectedobject6(i, -1) myedgecoll.add myent.getsafeentity me.labedgecount.caption = me.labedgecount.caption + 1 elseif swselmgr.getselectedobjecttype3(i, -1) = swselvertices then set myent = swselmgr.getselectedobject6(i, -1) myvertcoll.add myent.getsafeentity me.labvertcount.caption = me.labvertcount.caption + 1 elseif swselmgr.getselectedobjecttype3(i, -1) = swseldatumplanes then set myfeat = swselmgr.getselectedobject6(i, -1) myplanecoll.add myfeat me.labplanescount.caption = me.labplanescount.caption + 1 end if next i end sub i'll get you eh steve, if it's the last thing i dooooo! sub main() dim swapp as sldworks.sldworks dim part as sldworks.modeldoc2 dim selmgr as sldworks.selectionmgr dim swcomponent() as sldworks.component2 dim i as integer dim j as integer set swapp = getobject(, "sldworks.application") set part = swapp.activedoc set selmgr = part.selectionmanager i = selmgr.getselectedobjectcount redim swcomponent(i) for j = 0 to i set swcomponent(j) = selmgr.getselectedobjectscomponent3(j, -1) next j part.clearselection for j = 0 to i if not swcomponent(j) is nothing then swcomponent(j).select true end if next j end sub answer thanks josh and ivana, that's exactly what i needed. not sure why i didn't think of this. rich quick |
所有的时间均为北京时间。 现在的时间是 06:13 PM. |