SolidWorks 二次开发—SelectionManager的学习以及妙用

SolidWorks 二次开发—SelectionManager的学习以及妙用

SelectionManager的妙用


SelectionManager的介绍

官方API相关解释:
ISelectionMgr Interface: Allows you to get information about selected objects, obtain API objects representing the selected item, and get your selection coordinates interpreted in model or sketch space.
允许您获取有关所选对象的信息,获取表示所选项目的 API 对象,并在模型或草图空间中解释您的选择坐标。


SelectionManager Property (IModelDoc2):Gets the ISelectionMgr object for this document, which makes the currently selected object available. 获取此文档的ISelectionMgr对象,这使当前选定的对象可用。


Remarks:
ISelectionMgr objects are transient because they are invalid as soon as another selection is made. So, do not hold on to these pointers for any length of time.
备注:ISelectionMgr对象是暂时的,因为一旦做出另一个选择,它们就无效。因此,不要长时间持有这些指针。

属性和方法:

http://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.ISelectionMgr_members.html

常用属性和方法:

EnableContourSelection

		启用或者禁用轮廓选择
		Enables and disables contour selection.  

EnableSelection

		启用或者禁用选择
		Enables or disables selection.  

SelectionColor

	    获取或设置选择颜色
	    Gets or sets the selection color.  

GetSelectedObject6(int Index, int Mark)

(http://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworkssolidworks.interop.sldworks.iselectionmgrgetselectedobject6.html)
这个方法是获取当前选中的对象,可以通过swSelectType_e这个对象类型来判断具体的选择。
注意: Index是从1开始,可以指定获取到第几个。
Mark是可以指定标记值。可用于过滤,0 表示没有标记的对象。

	官方api示例: [Get Areas of MidSurface Faces (C#)](http://help.solidworks.com/2018/english/api/sldworksapi/Get_Areas_of_MidSurface_Faces_Example_CSharp.htm)

GetSelectedObjectCount2

这个一般用于配合上面的方法一起使用,用于获取对象数量。

GetSelectedObjectsComponent4

这个我们之前的例子中有讲过,获取选中对象所属的组件实例(适用于装配体和工程图中)。
Gets the selected component in an assembly or drawing.  

GetSelectedObjectType3

这个就是获取选中对象的类型。
	Gets the type of object selected.  

GetSelectionPoint2

这个可以直接获取鼠标点击的那个点的坐标。(全局的)
Gets the selected point in model space coordinates from the currently selected object.  
![在这里插入图片描述](https://img-blog.csdnimg.cn/2b172b282761407bb0dfea65e8f200cc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAUGFpbmUgWmVuZw==,size_10,color_FFFFFF,t_70,g_se,x_16)

GetSelectionPointInSketchSpace2

这个返回草图空间的选中点坐标。
Gets the selection point projected on to the active sketch and returned in sketch space. 

IsInEditTarget2

获取选中的对象是否属于正在编辑的对象。
Gets whether the selected object is in the edit target.  

SetSelectedObjectMark

设置Mark值给指定的选择对象
Sets the mark value for the specified selection.  

SetSelectionPoint2

设置选择的点在模型空间中
Sets the selection point in model space.

SuspendSelectionList / ResumeSelectionList

	Suspends the current selection list.   /  Reinstates the previously suspended selection list.  
	暂停当前​​选择列表。  /   	恢复先前暂停的选择列表。 
	 
	这两个方法才是我们今天要讲的主角。

思考题

在之前 ,如果你让用户选择了5个对象,你要针对每一个对象进行处理,而且中间还要进行一些对象的选择的时候。你是怎么做的?

常用方案

之前我的做法是把每一个对象保存起来,利用持久id或者对象 来一个一个进行处理,但是这样比较麻烦。

正确答案

先看下这一对方法的解释:

感觉就是你可以把当前选择的所有对象暂存,你可以进行一些操作,比如重新选择对象。 用完之后再把之前暂存的选择集恢复出来,就还是原来和状态。 这样你还可以继续进行下一个对象的处理。

具体可以看这个官方的示例:

Add Objects to Selection List Example (C#)


关键代码区域:

				// Start a new selection list

	            ret = selMgr.SuspendSelectionList();    

	            Debug.Print("The current selection list with " + ret + " object (Sketch1) is suspended.");

	            // Add two objects to the new selection list

	            numAdded = selMgr.AddSelectionListObjects((arrObjIn), selData);

	            Debug.Print("A new selection list is started.");


	            // Get number of objects in the new selection list (should be 2)

	            count = selMgr.GetSelectedObjectCount();

	            Debug.Print("The selection list now contains " + count + " objects.");


	            // Get the last object in the new selection list

	            selobj = selMgr.GetSelectedObject6(count, 	-1);

	            Debug.Print("The last object in the selection list is of swSelectType_e = " + selMgr.GetSelectedObjectType3(count, -1) + ".");


	            // Go back to the previous selection list

	            selMgr.ResumeSelectionList();

	            Debug.Print("The previous selection list is resumed.");


	            // Get the number of objects in the selection list (should be 1)

	            count = selMgr.GetSelectedObjectCount();

	            Debug.Print("The selection list now contains " + count + " object (Sketch1).");

总结

像这种方法,如果只是靠宏录制,你永远也不会知道还有这种操作,所以还是要学会常查API,翻一翻,看一看,就会有新的收获 。

如果这篇文章对你有帮助,就点个赞呗。

最后假期余额已不足,祝大家节日快乐。

posted @
2021-10-05 10:18 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源