




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6讲AutoCAD内部命令调用及用户交互 主讲人 刘德儿 2 使用AutoCAD内部命令 主要内容 3 和用户交互 4 选择集 1 C 类型转换成C 类型 1 C 调用dll时的类型转换 C Dll接口 voidCplusplusToCsharp inchar AgentID outchar AgentIP C 中的声明 DllImport Example dll publicstaticexternvoidCplusplusToCsharp char AgentID byte AgentIP C 中的调用 Encodingencode Encoding Default byte tAgentID byte tAgentIP string AgentIP tAgentID newbyte 100 tAgentIP newbyte 100 CplusplusToCsharp encode GetChars tAgentID tAgentIP AgentIP i encode GetString tAgentIP i Length Length 1 C 调用dll时的类型转换 1 C 调用dll时的类型转换 结构转换Win32 使用结构指针作为参数的函数 BOOLGetSystemPowerStatus LPSYSTEM POWER STATUSlpSystemPowerStatus Win32中该结构体的定义 typedefstruct SYSTEM POWER STATUS BYTEACLineStatus BYTEBatteryFlag BYTEBatteryLifePercent BYTEReserved1 DWORDBatteryLifeTime DWORDBatteryFullLifeTime SYSTEM POWER STATUS LPSYSTEM POWER STATUS 1 C 调用dll时的类型转换 C 用户自定义相应的结构体 structSystemPowerStatus byteACLineStatus bytebatteryFlag bytebatteryLifePercent bytereserved1 intbatteryLifeTime intbatteryFullLifeTime C 中导入该函数 DllImport kernel32 dll publicstaticexternboolGetSystemPowerStatus refSystemPowerStatussystemPowerStatus C 中调用该函数 SystemPowerStatussps sps初始化赋值 GetSystemPowerStatus refsps 1 C 调用dll时的类型转换 1 C 调用dll时的类型转换 字符串实例 Win32 BOOLGetFile LPCTSTRlpRootPathName C 函数声明 DllImport kernel32 dll CharSet CharSet Auto staticexternboolGetFile MarshalAs UnmanagedType LPTStr stringrootPathName 函数调用 stringpathname GetFile pathname 备注 DllImport中的CharSet是为了说明自动地调用该函数相关的Ansi版本或者Unicode版本 1 C 调用dll时的类型转换 字符串实例 变长字符串处理 C 函数声明 DllImport kernel32 dll CharSet CharSet Auto publicstaticexternintGetShortPathName MarshalAs UnmanagedType LPTStr stringpath MarshalAs UnmanagedType LPTStr StringBuildershortPath intshortPathLength 函数调用 StringBuildershortPath newStringBuilder 80 intresult GetShortPathName d test jpg shortPath shortPath Capacity strings shortPath ToString 1 C 调用dll时的类型转换 1 C 调用dll时的类型转换 C StructLayout LayoutKind Sequential CharSet CharSet Unicode structTimeZoneInformation publicintbias MarshalAs UnmanagedType ByValTStr SizeConst 32 publicstringstandardName DateTimestandardDate publicintstandardBias MarshalAs UnmanagedType ByValTStr SizeConst 32 publicstringdaylightName SystemTimedaylightDate publicintdaylightBias 1 C 调用dll时的类型转换 1 C 调用dll时的类型转换 C 将回调函数的声明转化为委托 delegateboolEnumDesktopProc MarshalAs UnmanagedType LPTStr stringdesktopName intlParam 该函数在C 中的声明 DllImport user32 dll CharSet CharSet Auto staticexternboolEnumDesktops IntPtrwindowStation EnumDesktopProccallback intlParam 2 使用AutoCAD内部命令 主要内容 3 和用户交互 4 选择集 1 C 类型转换成C 类型 2 使用AutoCAD内部命令 方式一 使用SendStringToExecute方式二 使用P Invoke 使用SendStringToExecute SendStringToExecute方法将单个字符串发送到命令行 该字符串必须包含提供给所执行命令的参数 并依照该命令的提示顺序所要求的次序排列这些参数使用SendStringToExecute执行命令是异步的 直到 NET命令结束 否则不会被调用 使用P Invoke方式 在ObjectARX编程中 可以使用以下函数来执行AutoCAD内部的命令acedCommandacedCmd acedCommand函数 C acedCommand函数的定义为 intacedCommand intrtype unnamed acedCommand函数 NET中调用acedCommand函数实例 绘制圆 效果 acedCommand函数 创建将块生成ICON命令BlockIcon acedCmd函数 C 中 acedCmd函数的定义为 intacedCmd conststructresbuf rbp 该函数的参数是一个resbuf类型的指针 这里需要的结果缓冲区可以由acutBuildList函数生成 由于acedCommand函数实质上也是为要执行的命令构造了一个resbuf结构 因此acedCmd函数和acedCommand函数完全能够实现相同的功能 acedCmd函数 unionads u val ads realrreal ads realrpoint 3 shortrint Mustbedeclaredshort notint char rstring longrlname 2 longrlong structads binaryrbinary structresbuf structresbuf rbnext Linkedlistpointershortrestype unionads u valresval acedCmd函数 C 中使用acedCmd函数创建Zoom实例 acedCmd函数 C 中使用acedCmd函数创建Circle实例 2 使用AutoCAD内部命令 主要内容 3 和用户交互 4 选择集 1 C 类型转换成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 acedGetInt acedGetKword和acedGetReal等C 命名空间 Autodesk AutoCAD EditorInputGetString GetPoint GetInt GetKword和GetReal等输入提示并获取输入结果模板输入提示PromptXXXOptionspOptions newPromptXXXOptions 获得输入结果 1 有指定类型返回结果PromptXXXResultpResult ed GetXXX pOptions 2 没有指定类型返回结果 string型 PromptResultpResult ed GetXXX pOptions 3 得到具体结果 如stringDK pResult StringResult Trim 3 和用户交互 输入提示抽象类 PromptOptions 所有具体提示输入类都继承了该类 3 和用户交互 实例 读入字符串 3 和用户交互 实例 读入Double型数据 3 和用户交互 实例 读入Point 3 和用户交互 实例 拾取实体 3 和用户交互 实例 打开dwg文件 usingAutodesk AutoCAD Windows 2 使用AutoCAD内部命令 主要内容 3 和用户交互 4 选择集 1 C 类型转换成C 类型 4 选择集 1 获得PickFirst选择集2 在图形区域中选择对象3 添加或合并多个选择集4 定义选择集过滤规则5 从选择集中移除对象 4 1 获得PickFirst选择集 PickFirst选择集是在先选择对象后启动命令的时候创建的为了获得PickFirst选择集的对象 必须满足 PICKFIRST系统变量必须设置为1必须给命令定义UsePickSet命令标记 用以通知命令要使用Pickfirst选择集调用SelectImplied方法获得PickFirst选择集 4 2 在图形区域中选择对象 允许用户从图形中选择对象的函数 GetSelection 提示用户从屏幕中拾取对象SelectAll 在当前空间中选择所有对象 但不包括锁定或冻结的SelectCrossingPolygon 选择与通过指定点定义的多边形内部和相交的对象 多边形可以是任何形状但不能与它自己相交或接触SelectCrossingWindow 选择与通过两个点定义的区域内部和相交的对象SelectFence 选择与选择栅格相交的所有对象 栅格选择与多边形相交选择是相似的 不同的是栅格不能封闭 而且栅格可以与自己相交 4 2 在图形区域中选择对象 SelectLast 选择当前空间中最后创建的对象SelectPrevious 选择在前一个选择对象提示时选择的所有对象SelectWindow 选择完全包含在通过两个点定义的矩形内部的所有对象SelectWindowPolygon 选择完全包含在通过点定义的多边形里面的对象 多边形可以是任何形状但不能与它自己相交或接触SelectAtPoint 选择经过给定点的对象并将它们放到活动选择集中去SelectByPolygon 选择栅格内部的对象并将它们放到活动选择集中去 4 3 添加或合并多个选择集 用户可以合并多个选择集 需要创建一个ObjectIdCollection对象 然后向其中添加多个选择集的对象的ObjectID 4 4 定义选择集过滤规则 选择集过滤规则类型 使用选择集过滤器定义选择集规则在选择集过滤器中指定多个条件添加复杂的过滤器列表条件在选择器过滤器条件中使用通配符过滤扩展数据 4 4 1 使用选择集过滤器定义选择集规则 常用过滤器的DXF组码 4 4 1 使用选择集过滤器定义选择集规则 过滤器类SelectionFilter 4 4 1 使用选择集过滤器定义选择集规则 实例 使用过滤器选择圆图形实体 4 4 2 在选择集过滤器中指定多个条件 示例 给定两个选择对象的过滤条件 对象必须是圆 并且必须在图层0上 4 4 3 添加复杂的过滤器列表条件 指定多
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论