已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARX操作dwg数据库初步ARX操作dwg数据库初步概述 :ARX(AutoCAD Runtime eXtention)程序的实质是windows DLL程序。在AutoCAD中,用户可以利用ObjectARX环境的支持,用C+开发ARX应用程序。本节主要完成如下任务:1:配置环境,创建模块;2:数据库基本操作;3:示例:添加线、圆、多段线实体;4:示例:打开数据库并修改实体颜色;一、配置环境,创建模块l 将arx的开发包放到d:arx目录下,在后面创建的arx工程作如下设置,这样ObjectARX的头文件和lib文件在编译时都能找到。 l 利用向导创建工程,点击菜单的新建(如果没有arx向导出来,则安装d:arxarx2002 utils ObjARXWiz wizards.exe解压缩安装以下即可)如上,选择OjbectARX2000/200oi/2002 AppWinzard,右边选择工程名称和目录,点击ok。ObjectDBX工程是创建自定义的实体,下一节再讲。 ObjectARX工程是创建应用模块,进行一些图形的操作,如果模块用到MFC的内容,下面的Use MFC也选择;Your Registered Developer Symbol:是避免开发商之间模块同名冲突加的一个前缀;在这里,我们选择object ARX。l 打开arxtest.cpp了解一下:acrxEntryPoint()/是AutoCAD的消息入口,用switch处理各种消息。acedRegCmds-addCommand( RX_TEST, MODAL, MODAL,ACRX_CMD_MODAL, &modalDlgTest); /注册命令,在cad的命令行输入modal,就会执行函数modalTest()可以类似注册自己的函数来完成自己定义的功能;void InitApplication(); /初始化函数void UnloadApplication(); /卸载函数定义l 另外还有一种从创建MFC应用程序入手,自己写接口的方法。创建MFC的exe程序,根据向导完成配置。在.cpp文件中作如下修改:#include stdafx.h#include extern C HWND adsw_acadMainWnd();/ Define the sole extension module object.AC_IMPLEMENT_EXTENSION_MODULE(theArxDLL);void modalDlgTest() / When resource from this ARX app is needed, just / instantiate a local CAcModuleResourceOverride CAcModuleResourceOverride resOverride; CTestDlg dlg(CWnd:FromHandle(adsw_acadMainWnd();dlg.DoModal();/ MFC Initialization - DllMain will be called first once / the application loaded./extern C int APIENTRYDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)/ Remove this if you use lpReservedUNREFERENCED_PARAMETER(lpReserved);if (dwReason = DLL_PROCESS_ATTACH) theArxDLL.AttachInstance(hInstance);else if (dwReason = DLL_PROCESS_DETACH) theArxDLL.DetachInstance();return 1; / ok/ Entry point - called after DllMain() is called/extern C _declspec(dllexport)AcRx:AppRetCode acrxEntryPoint(AcRx:AppMsgCode msg, void* p)switch( msg ) case AcRx:kInitAppMsg: acrxRegisterAppMDIAware(p);acedRegCmds-addCommand( RX_TEST, MODAL, MODAL, ACRX_CMD_MODAL, &modalDlgTest);acutPrintf( nEnter modal to bring up the dialog.n );break;case AcRx:kUnloadAppMsg: acedRegCmds-removeGroup(RX_TEST );break;default:break;return AcRx:kRetOK;下一步,来看看数据库的基本操作。二、数据库基本操作l AutoCAD数据库(AutoCAD Datebase)是按一定结构组织的AutoCAD图形全部有关数据的集合。l 数据库结构图: 数据库主要包括:9个符号表和对象字典。块表(AcDbBlockTable)尺寸标注样式表(AcDbDimStyleTable):层表(AcDbLayerTable)线型表(AcDbLinetypeTable)应用程序注册表(AcDbRegAppTable)文字样式表(AcDbTextStyleTable)用户坐标系表(AcDbUCSTable)视口表(AcDbViewportTable)视窗表(AcDbViewTable)其中,所有的实体都存储在块表记录中;2-5的表均用来存储相应的表记录。对象字典是用来存储任何数据库对象和子类的容器。这里作为初步了解,以后碰到再详细说。l 创建实体基本步骤:(1) 获得当前图形的块表指针AcDbBlockTable* pBlockTable;/定义块表指针acdbCurDwg()-getBlockTable(pBlockTable,AcDb:kForRead);/获得当前图形的块标指针(2) 获得当前图形的块表记录指针AcDbBlockTableRecord* pBlockTableRecord;/定义块表pBlockTable-getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb:kForWrite);/以写方式打开模型空间,获得块表记录指针pBlockTable-close();/关闭块表(3) 生成实体对象(eg.画Line),并写入数据库AcDbLine *pLine = new AcDbLine(startPt,endPt);/创建LINE对象AcDbObjectId LId;/定义标识符pBlockTableRecord-appendAcDbEntity(LId,pLine);/将实体写入块表记录(4) 做必要的关闭工作pBlockTableRecord-close();/关闭块表记录pLine-close();/调用关闭对象的成员函数return LId;/返回对象标识注意:前后打开和关闭一定要对应,不要忘记。三、示例:画直线,圆等实体(1) 照上述的方法,新建一个ARX的工程,命名为Test。(2) 利用向导,添加command命令(CMD)。在如下对话框中,添加命令。单击Add按钮,下部框内出现添加好的命令。单击OK,完成。系统自动生成一个新的文件TestCommands.cpp。并且在Test.cpp中会看到:void InitApplication()/ NOTE: DO NOT edit the following lines./AFX_ARX_INITAddCommand(LB, DL, DL, ACRX_CMD_TRANSPARENT | CRX_CMD_USEPICKSET, lbDL);/AFX_ARX_INIT/ TODO: add your initialization functions(3) 在StdAfx.h中包含三个头文件:#include dbents.h /AcDb类实体定义#include dbsymtb.h /符号表等输出协议#include migrtion.h /几何类相关的一个头文件(4) 在Test.cpp中,添加画直线的函数,具体程序如下:AcDbObjectId CreateLine() AcGePoint3d startPt(1,1,0),endPt(700,100,0);/定义终点AcDbBlockTable* pBlockTable;/定义块表指针acdbCurDwg()-getBlockTable(pBlockTable,AcDb:kForRead);/获得当前图形块标指针 AcDbBlockTableRecord* pBlockTableRecord;/定义块表pBlockTable-getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb:kForWrite);/以写方式打开模型空间,获得块表记录指针pBlockTable-close();/关闭块表AcDbLine *pLine = new AcDbLine(startPt,endPt);/创建LINE对象AcDbObjectId LId;/定义标识符pBlockTableRecord-appendAcDbEntity(LId,pLine);/将实体写入块表记录pBlockTableRecord-close();/关闭块表记录pLine-close();return LId; (5) 在TestCommands.cpp中添加命令,并申明一下。如下:#include StdAfx.h#include StdArx.hAcDbObjectId CreateLine();/-/ This is command DL, by 2006-2-9, , void lbDL()#ifdef OARXWIZDEBUGacutPrintf (nOARXWIZDEBUG - lbDL() called.);#endif / OARXWIZDEBUG/ TODO: Implement the command CreateLine();(6) Build一下,编译通过以后,打开AutoCAD,在命令中输入arx回车;输入L,选择加载;双击/Test/Debug/lbTest.arx,加载成功。或者打开后输入appload,在对话框中选择要加载的文件也可以。最后在命令中输入DL,屏幕上就会出现一条我们规定的路径的直线了。卸载的话,也可以通过输入arx,然后选择U,选择要卸载的文件即可。好了,同样道理可以画圆和圆弧等等的。我把圆和文字Text的主要程序段给出来,你们可以自己试试看,按照画直线的方法。AcDbObjectId CreateCircle()AcGePoint3d center(100,10,0);/定义圆心AcGeVector3d normal(0.0,0.0,1.0);/定义法向矢量AcDbBlockTable* pBlockTable;acdbCurDwg()-getBlockTable(pBlockTable,AcDb:kForRead); AcDbBlockTableRecord* pBlockTableRecord;pBlockTable-getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb:kForWrite);pBlockTable-close();AcDbCircle *pCircle = new AcDbCircle(center,normal,50.0);AcDbObjectId CId;pBlockTableRecord-appendAcDbEntity(CId,pCircle);pBlockTableRecord-close();pCircle-close();return CId;AcDbObjectId CreateText()AcGePoint3d sPt(200.0,10.0,0.0); AcDbBlockTable* pBlockTable;acdbCurDwg()-getBlockTable(pBlockTable,AcDb:kForRead); AcDbBlockTableRecord* pBlockTableRecord;pBlockTable-getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb:kForWrite);pBlockTable-close();AcDbText *pText = new AcDbText(sPt,string,AcDbObjectId:kNull,20,0); AcDbObjectId TId; pBlockTableRecord-appendAcDbEntity(TId,pText);pBlockTableRecord-close(); pText-close();return TId;四、打开数据库并修改实体颜色l 打开数据库:acdbOpenObject()函数,打开一个数据库对象,并获得指向该对象的指针。指针变量名-close(); /关闭对象。acdbGetObjectId(); /获得对象标识符l 修改实体颜色程序操作:(接着原来的工程做,步骤类似于画直线)(1)添加CMD命令(2)在Test.cpp添加:void ChangeColor()int newColor;ads_name en;ads_point pt; acedEntSel(n选择实体:,en,pt);acedGetInt(n新颜色值:,&new
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防员实操装备题库及答案
- 临沂慈善捐赠协议书
- 2026-2031年中国砷化镓微波场效应晶体管市场竞争策略及投资潜力研究预测报告
- 槽钢现浇阳台协议书
- 基于极大似然估计的系统发育树构建:理论、方法与实践
- 2026-2031全球及中国便携式癌症筛查设备行业发展现状调研及投资前景分析报告
- 基于机器视觉的猪胴体表皮干湿状态自动识别技术:原理、应用与展望
- 2026-2031年中国舒尔克胶囊行业市场分析及投资可行性研究报告
- 辽宁省葫芦岛市协作校2026届高三上学期第一次考试历史试卷(含答案)
- 2025年有限空间培训试卷及答案
- 手术麻醉入科教育
- 市场部的安全生产职责
- 湖南省多校联考2026届高三上册10月第一次联考物理试卷(含答案)
- 2026年能源加工公司产学研合作研发项目管理制度
- 9《复活》课件2025-2026学年统编版高中语文选择性必修上册
- 浙江省杭州市拱墅区2025-2026学年八年级上学期期中数学模拟试卷(含解析)
- 加工服装洗水合同范本
- 项目实施过程中的技术支持方案
- 基于SCP范式剖析我国烟草业市场行为:结构、策略与绩效洞察
- 流量计培训课件
- 桥梁高空作业安全培训课件
评论
0/150
提交评论