![]() |
【转帖】selection boxes
selection boxes
hello, is there any example describing how to get selected objects from selection box inside the property page correctly? i mean the correct usage of selectionbox items list, getting marks and reassigning them. any help is greatly appreciated. regards, basil "and when you loose control, you'll reap the harvest you have sown..." (c) pink floyd solidworks 2008 x64 sp5.0 (production) solidworks 2009 x64 sp2.0 (testing) windows xp x64 sp2 core2quad 6600, 4gb ram, 500gb sata, ati firegl v7700 1024mb (softmodded from hd3850), 19" tft basil, here is a basic example that uses the pm to select components of an assembly, then set their material (may be used in future version of batchprocess, obviously a lot more sophisticated thought)... create a module with the following code: option explicit public swapp as sldworks.sldworks public part as sldworks.modeldoc2 public selmgr as sldworks.selectionmgr public matdb as string public mypropvals(1) as string public pm as clspropmgr sub main() set swapp = application.sldworks set part = swapp.activedoc ' check part is valid if part is nothing then msgbox "part or assembly must be open.", vbcritical end end if set selmgr = part.selectionmanager ' setup material datebase to look in matdb = "solidworks materials" ' setup materials list in the form: column, row mypropvals(0) = "alloy steel" mypropvals(1) = "cast carbon steel" ' create new instance of class ' this will call class_initialize event of the class set pm = new clspropmgr pm.show end sub then create a class with the following code: option explicit ' required for property manager controls ' forces class to have all public procedures of propertymanagerpage2handler4 ' leaving any out causes error implements propertymanagerpage2handler4 ' general objects required for propertymanagerpage dim pm_page as propertymanagerpage2 dim pm_group as propertymanagerpagegroup dim pm_selection as propertymanagerpageselectionbox dim pm_label as propertymanagerpagelabel dim pm_combo as propertymanagerpagecombobox ' each object in the page requires unique id const groupid as integer = 1 const labelid as integer = 2 const selectionid as integer = 3 const comboid as integer = 4 dim clickedcancel as boolean dim density as string dim material as string sub show() pm_page.show end sub ' run every time new instance created... private sub class_initialize() dim pagetitle as string dim caption as string dim tip as string dim options as long dim filters(0) as long dim longerrors as long dim controltype as integer dim alignment as integer ' create :: propertymanagerpage pagetitle = "set materials" ' lockedpage prevents accidental termination of the page options = swpropertymanager_okaybutton + swpropertymanager_cancelbutton + swpropertymanageroptions_lockedpage ' handler (me [this class]) must be a class with all propertymanagerpage2handler4 procedures defined set pm_page = swapp.createpropertymanagerpage(pagetitle, options, me, longerrors) ' make sure that it was created properly if longerrors = swpropertymanagerpage_okay then ' fill in information for the message in pm page ' swimportantmessagebox makes it yellow pm_page.setmessage "select all components you wish to set material. select material from list click ok.", swimportantmessagebox ' begin adding controls to the dialog... ' create :: groupbox (group materials) caption = "materials" options = swgroupboxoptions_visible + swgroupboxoptions_expanded set pm_group = pm_page.addgroupbox(groupid, caption, options) ' create:: label (components to change) controltype = swcontroltype_label caption = "components to change" alignment = swcontrolalign_indent options = swcontroloptions_visible + swcontroloptions_enabled tip = "" set pm_label = pm_group.addcontrol(labelid, controltype, caption, alignment, options, tip) ' selectionbox (only needed for assemblies) if part.gettype = swdocassembly then ' create: selectionbox (selected components) controltype = swcontroltype_selectionbox caption = "" alignment = swcontrolalign_indent options = swcontroloptions_visible + swcontroloptions_enabled tip = "select components" set pm_selection = pm_group.addcontrol(selectionid, controltype, caption, alignment, options, tip) ' setup settings for selection box filters(0) = swselcomponents pm_selection.singleentityonly = false pm_selection.height = 50 pm_selection.setselectionfilters filters pm_selection.setstandardpicturelabel swbitmaplabel_selectcomponent end if ' create :: combobox (material selection) controltype = swcontroltype_combobox caption = "" ' no caption for comboboxes alignment = swcontrolalign_indent options = swcontroloptions_visible + swcontroloptions_enabled tip = "" set pm_combo = pm_group.addcontrol(comboid, controltype, caption, alignment, options, tip) ' add material array to combobox pm_combo.additems mypropvals else ' if propertymanagerpage not created properly msgbox "there was an error creating the propertymanager page", vbcritical end if end sub private sub propertymanagerpage2handler4_afterclose() dim i as integer dim component as sldworks.component2 dim part2 as sldworks.modeldoc2 if clickedcancel = true then exit sub if part.gettype = swdocassembly then for i = 1 to selmgr.getselectedobjectcount set component = selmgr.getselectedobjectscomponent2(i) set part2 = component.getmodeldoc if part2.gettype = swdocpart then part2.setmaterialpropertyname2 "", matdb, material 'part2.editrebuild3 end if next i part.editrebuild3 elseif part.gettype = swdocpart then part.setmaterialpropertyname2 "", matdb, material part.editrebuild3 end if ' destroy the class set pm = nothing end sub private sub propertymanagerpage2handler4_onclose(byval reason as long) if reason = swpropertymanagerpageclose_okay then ' ok was pressed clickedcancel = false elseif reason = swpropertymanagerpageclose_cancel then ' cancel was pressed clickedcancel = true end if material = mypropvals(pm_combo.currentselection) end sub private function propertymanagerpage2handler4_onsubmitselection(byval id as long, byval selection as object, byval seltype as long) as boolean ' every time a selection is made, return true or false to validate and allow or disallow the selection ' good for checking whether you want the type of selected item ' allow all propertymanagerpage2handler4_onsubmitselection = true end function ps in the class, you may need to define blank function calls to all of the propertypage events before it will let you build it, so just create the blanks if asked. i left them out for space saving luke, thank you for the example, i have seen something similar in help, but what can i do if the selection is an edge? the manual says the method returns edge object but i can not get anything from it. i will check your code and think how can i deal with my task. regards, basil "and when you loose control, you'll reap the harvest you have sown..." (c) pink floyd solidworks 2008 x64 sp5.0 (production) solidworks 2009 x64 sp2.0 (testing) windows xp x64 sp2 core2quad 6600, 4gb ram, 500gb sata, ati firegl v7700 1024mb (softmodded from hd3850), 19" tft is there any possibility how to use this selection box out of property manager page? i mean as control on user control or even better in vb6. quick |
所有的时间均为北京时间。 现在的时间是 02:19 AM. |