AutoCAd内部命令调用及用户交互.ppt

上传人:小飞机 文档编号:5416102 上传时间:2023-07-05 格式:PPT 页数:58 大小:639.50KB
返回 下载 相关 举报
AutoCAd内部命令调用及用户交互.ppt_第1页
第1页 / 共58页
AutoCAd内部命令调用及用户交互.ppt_第2页
第2页 / 共58页
AutoCAd内部命令调用及用户交互.ppt_第3页
第3页 / 共58页
AutoCAd内部命令调用及用户交互.ppt_第4页
第4页 / 共58页
AutoCAd内部命令调用及用户交互.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《AutoCAd内部命令调用及用户交互.ppt》由会员分享,可在线阅读,更多相关《AutoCAd内部命令调用及用户交互.ppt(58页珍藏版)》请在三一办公上搜索。

1、,第6讲 AutoCAD内部命令调用及用户交互,主讲人:刘德儿,2、使用AutoCAD内部命令,主要内容,3、和用户交互,4、选择集,1、C+类型转换成C#类型,1、C#调用dll时的类型转换,C+Dll接口:void CplusplusToCsharp(in char*AgentID,out char*AgentIP);C#中的声明:DllImport(Example.dll)public static extern void CplusplusToCsharp(char AgentID,byte AgentIP);C#中的调用:Encoding encode=Encoding.Defaul

2、t;byte tAgentID;byte tAgentIP;string AgentIP;tAgentID=new byte100;tAgentIP=new byte100;CplusplusToCsharp(encode.GetChars(tAgentID),tAgentIP);AgentIPi=encode.GetString(tAgentIP,i*Length,Length);,1、C#调用dll时的类型转换,1、C#调用dll时的类型转换,结构转换Win32:使用结构指针作为参数的函数:BOOL GetSystemPowerStatus(LPSYSTEM_POWER_STATUS lp

3、SystemPowerStatus);Win32中该结构体的定义:typedef struct _SYSTEM_POWER_STATUS BYTEACLineStatus;BYTEBatteryFlag;BYTEBatteryLifePercent;BYTEReserved1;DWORDBatteryLifeTime;DWORDBatteryFullLifeTime;SYSTEM_POWER_STATUS,*LPSYSTEM_POWER_STATUS;,1、C#调用dll时的类型转换,C#:用户自定义相应的结构体:struct SystemPowerStatusbyte ACLineStatu

4、s;byte batteryFlag;byte batteryLifePercent;byte reserved1;int batteryLifeTime;int batteryFullLifeTime;C#中导入该函数:DllImport(kernel32.dll)public static extern bool GetSystemPowerStatus(ref SystemPowerStatus systemPowerStatus);C#中调用该函数:SystemPowerStatus sps;.sps初始化赋值GetSystemPowerStatus(ref sps);,1、C#调用d

5、ll时的类型转换,1、C#调用dll时的类型转换-字符串实例,Win32:BOOL GetFile(LPCTSTR lpRootPathName);C#:函数声明:DllImport(kernel32.dll,CharSet=CharSet.Auto)static extern bool GetFile(MarshalAs(UnmanagedType.LPTStr)string rootPathName);函数调用:string pathname;GetFile(pathname);备注:DllImport中的CharSet是为了说明自动地调用该函数相关的Ansi版本或者Unicode版本,1

6、、C#调用dll时的类型转换-字符串实例,变长字符串处理:C#:函数声明:DllImport(kernel32.dll,CharSet=CharSet.Auto)public static extern int GetShortPathName(MarshalAs(UnmanagedType.LPTStr)string path,MarshalAs(UnmanagedType.LPTStr)StringBuilder shortPath,int shortPathLength);函数调用:StringBuilder shortPath=new StringBuilder(80);int res

7、ult=GetShortPathName(d:test.jpg,shortPath,shortPath.Capacity);string s=shortPath.ToString();,1、C#调用dll时的类型转换,1、C#调用dll时的类型转换,C#:StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)struct TimeZoneInformationpublic int bias;MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)public string standardNa

8、me;DateTime standardDate;public int standardBias;MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)public string daylightName;SystemTime daylightDate;public int daylightBias;,1、C#调用dll时的类型转换,1、C#调用dll时的类型转换,C#:将回调函数的声明转化为委托:delegate bool EnumDesktopProc(MarshalAs(UnmanagedType.LPTStr)string desktopName

9、,int lParam);该函数在C#中的声明:DllImport(user32.dll,CharSet=CharSet.Auto)static extern bool EnumDesktops(IntPtr windowStation,EnumDesktopProc callback,int lParam);,2、使用AutoCAD内部命令,主要内容,3、和用户交互,4、选择集,1、C+类型转换成C#类型,2、使用AutoCAD内部命令,方式一:使用SendStringToExecute 方式二:使用P/Invoke,使用SendStringToExecute,SendStringToExe

10、cute 方法将单个字符串发送到命令行。该字符串必须包含提供给所执行命令的参数,并依照该命令的提示顺序所要求的次序排列这些参数 使用 SendStringToExecute 执行命令是异步的,直到.NET 命令结束,否则不会被调用,使用P/Invoke方式,在ObjectARX编程中,可以使用以下函数来执行AutoCAD内部的命令acedCommandacedCmd,acedCommand函数,C+acedCommand函数的定义为:int acedCommand(int rtype,.unnamed);,acedCommand函数,.NET中调用acedCommand函数实例:绘制圆,效果,

11、acedCommand函数,创建将块生成ICON命令BlockIcon,acedCmd函数,C+中,acedCmd函数的定义为:int acedCmd(const struct resbuf*rbp);该函数的参数是一个resbuf类型的指针,这里需要的结果缓冲区可以由acutBuildList函数生成。由于acedCommand函数实质上也是为要执行的命令构造了一个resbuf结构,因此acedCmd函数和acedCommand函数完全能够实现相同的功能,acedCmd函数,union ads_u_val ads_real rreal;ads_real rpoint3;short rint;

12、/Must be declared short,not int.char*rstring;long rlname2;long rlong;struct ads_binary rbinary;struct resbuf struct resbuf*rbnext;/Linked list pointer short restype;union ads_u_val resval;,acedCmd函数,C#中使用acedCmd函数创建Zoom实例,acedCmd函数,C#中使用acedCmd函数创建Circle实例,2、使用AutoCAD内部命令,主要内容,3、和用户交互,4、选择集,1、C+类型转换

13、成C#类型,3、和用户交互,AutoCAD中命令提示如在AutoCAD中执行PLINE命令时,能够得到如下的命令提示:,命令:_pline 指定起点:当前线宽为 0.0000 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):,其中的提示“指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):”就将提示用户输入点和关键字结合在一起。,3、和用户交互,C+ObjectARX中提供了多个提示用户输入的全局函数,包括acedGetString、acedGetPoint

14、、acedGetInt、acedGetKword和acedGetReal等C#命名空间:GetString、GetPoint、GetInt、GetKword和GetReal等输入提示并获取输入结果模板输入提示 PromptXXXOptions pOptions=new PromptXXXOptions(“”)获得输入结果(1)有指定类型返回结果 PromptXXXResult pResult=ed.GetXXX(pOptions);(2)没有指定类型返回结果(string型)PromptResult pResult=ed.GetXXX(pOptions);(3)得到具体结果,如 string

15、DK=pResult.StringResult.Trim();,3、和用户交互,输入提示抽象类:PromptOptions,所有具体提示输入类都继承了该类,3、和用户交互-实例,读入字符串,3、和用户交互-实例,读入Double型数据,3、和用户交互-实例,读入Point,3、和用户交互-实例,拾取实体,3、和用户交互-实例,打开dwg文件(using Autodesk.AutoCAD.Windows;),2、使用AutoCAD内部命令,主要内容,3、和用户交互,4、选择集,1、C+类型转换成C#类型,4、选择集,1)获得PickFirst选择集 2)在图形区域中选择对象 3)添加或合并多个选

16、择集 4)定义选择集过滤规则 5)从选择集中移除对象,4.1、获得PickFirst选择集,PickFirst 选择集是在先选择对象后启动命令的时候创建的为了获得 PickFirst 选择集的对象,必须满足:PICKFIRST 系统变量必须设置为 1 必须给命令定义 UsePickSet 命令标记,用以通知命令要使用 Pickfirst 选择集 调用 SelectImplied 方法获得 PickFirst 选择集,4.2、在图形区域中选择对象,允许用户从图形中选择对象的函数:GetSelection:提示用户从屏幕中拾取对象 SelectAll:在当前空间中选择所有对象,但不包括锁定或冻结的

17、 SelectCrossingPolygon:选择与通过指定点定义的多边形内部和相交的对象。多边形可以是任何形状但不能与它自己相交或接触 SelectCrossingWindow:选择与通过两个点定义的区域内部和相交的对象SelectFence:选择与选择栅格相交的所有对象。栅格选择与多边形相交选择是相似的,不同的是栅格不能封闭,而且栅格可以与自己相交,4.2、在图形区域中选择对象,SelectLast:选择当前空间中最后创建的对象 SelectPrevious:选择在前一个选择对象提示时选择的所有对象 SelectWindow:选择完全包含在通过两个点定义的矩形内部的所有对象 SelectW

18、indowPolygon:选择完全包含在通过点定义的多边形里面的对象。多边形可以是任何形状但不能与它自己相交或接触 SelectAtPoint:选择经过给定点的对象并将它们放到活动选择集中去 SelectByPolygon:选择栅格内部的对象并将它们放到活动选择集中去,4.3、添加或合并多个选择集,用户可以合并多个选择集,需要创建一个 ObjectIdCollection 对象,然后向其中添加多个选择集的对象的 ObjectID,4.4、定义选择集过滤规则,选择集过滤规则类型:使用选择集过滤器定义选择集规则 在选择集过滤器中指定多个条件 添加复杂的过滤器列表条件 在选择器过滤器条件中使用通配符

19、 过滤扩展数据,、使用选择集过滤器定义选择集规则,常用过滤器的 DXF 组码,、使用选择集过滤器定义选择集规则,过滤器类SelectionFilter,、使用选择集过滤器定义选择集规则,实例:使用过滤器选择圆图形实体,、在选择集过滤器中指定多个条件,示例,给定两个选择对象的过滤条件:对象必须是圆,并且必须在图层 0 上,、添加复杂的过滤器列表条件,指定多个选择条件的方式:对于数字项,用户可以指定关系运算(例如,圆的半径必须大于或等于 5.0)对于所有项,用户可以指定逻辑运算(例如 Text 或 Mtext),、添加复杂的过滤器列表条件,实例1:选择半径大于或等于 5.0 的圆,、添加复杂的过滤

20、器列表条件,实例2:选择 Text 或 Mtext 对象,、在选择器过滤器条件中使用通配符,主要通配符,注:使用单引号()表示下一个字符不是通配符,而是普通字符。例如,要指定仅将命名为“*U2”的匿名块包含在选择集中,请使用“*U2”。,、在选择器过滤器条件中使用通配符,实例:选择所有文字字符串中出现“The”的多行文字,、过滤扩展数据,外部应用程序可以向 AutoCAD 对象附加数据,例如文字字符串、数值、三维点、距离和图层名。这种数据称为外部数据或 Xdata,实例:查找出包含通过“MY_APP”应用程序添加的外部数据的圆,4.5、从选择集中移除对象,创建选择集之后,用户可以使用选定对象的 ObjectID 列表选择集不允许从它里面添加或删除 ObjectID,但可以使用一个 ObjectIDCollection 对象合并多个选择集并将它当作一个对象使用可以从 ObjectIDCollection 对象上添加和移除 ObjectID,使用 Remove 或 RemoveAt 方法从一个 ObjectIDCollection 对象中移除 ObjectID,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号