- 积分
- 2913
- 明经币
- 个
- 注册时间
- 2005-11-1
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2008-5-3 20:50:00
|
显示全部楼层
是不是问题太简单了,居然没有人回应。没办法自己摸索吧,终于弄出来了,呵呵,同lisp语言有点儿类似。不敢独享,对还有疑问的人可能会有帮助。
功能:选择半径大于等于40,小于100的所有圆和0层、1层上的所有线(*LINE)。
lisp代码:- (setq ss (ssget '((-4 . "<OR")
- (-4 . "<AND")
- (0 . "CIRCLE")
- (-4 . ">=")
- (40 . 40)
- (-4 . "<")
- (40 . 100)
- (-4 . "AND>")
- (-4 . "<AND")
- (0 . "*LINE")
- (8 . "0,1")
- (-4 . "AND>")
- (-4 . "OR>")
- )
- )
- )
C#代码:- using System;
- using System.Collections.Generic;
- using System.Text;
- // 访问AutoCAD程序对象。
- using Autodesk.AutoCAD.ApplicationServices;
- // 访问 the AutoCAD 编辑器。
- using Autodesk.AutoCAD.EditorInput;
- // 命令注册。
- using Autodesk.AutoCAD.Runtime;
- // 访问数据库对象。
- using Autodesk.AutoCAD.DatabaseServices;
- namespace Prompt
- {
- public class Class1
- {
- [CommandMethod("SelectFilter")]
- static public void SelectEnt()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- PromptSelectionOptions selectionOp = new PromptSelectionOptions();
- // 多重选择,选择半径大于等于40的圆或者0,1层上的所有线
- TypedValue[] filList =
- {
- new TypedValue(-4,"<OR"),
- new TypedValue(-4,"<AND"),
- new TypedValue(0,"CIRCLE"),
- new TypedValue(-4,">="),
- new TypedValue(40,40),
- new TypedValue(-4,"<"),
- new TypedValue(40,100),
- new TypedValue(-4,"AND>"),
- new TypedValue(-4,"<AND"),
- new TypedValue(0,"*LINE"),
- new TypedValue(8,"0,1"),
- new TypedValue(-4,"AND>"),
- new TypedValue(-4,"OR>")
- };//注意分号
- SelectionFilter filter = new SelectionFilter(filList);
- PromptSelectionResult ssRes = ed.GetSelection(selectionOp, filter);
- if (ssRes.Status == PromptStatus.OK)
- {
- SelectionSet SS = ssRes.Value;
- int nCount = SS.Count;
- ed.WriteMessage("选择了{0}个实体", nCount);
- }
- }
- }
- }
|
|