ObjectARX(实训讲义一)

合集下载

ObjectArx自定义实体入门

ObjectArx自定义实体入门

[资料] ObjectArx自定义实体入门(C++)及注意事项收藏本文介绍了构造自定义实体的步骤、必须继承的函数和必须注意的事项1.新建一个从AcDbEntity继承的类,如EntTest,必须添加的头文件: "stdarx.h","acadstrc.h", "geassign.h"。

2.在该类头文件的类声明中添加宏:ACRX_DECLARE_MEMBERS(EntTest);3.在该类的cpp文件中,类的前面添加宏:ACRX_DXF_DEFINE_MEMBERS(EntTest, AcDbEntity,AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,0,平面实体,"autoCAD");//第5个参数为在CAD中该实体类的名称,MAKE_ACDBOPENOBJECT_FUNCTION(EntTest);4.从AcDbEntity类中重载几个必须的虚函数:virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode);virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler*);virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const;virtual Acad::ErrorStatus getGripPoints(AcGePoint3dArray&gripPoints,AcDbIntArray&osnapModes,AcDbIntArray& geomIds) const;virtual Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);5.实现第4步中几个虚函数必须注意:在dwgInFields函数的开始处必须有:assertWriteEnabled();AcDbObject::dwgInFields(pFiler);if(pFiler->filerType()==AcDb::kWblockCloneFiler){AcDbHardPointerId Id;pFiler->readItem(&Id);}在dwgOutFields函数的开始处必须有:assertReadEnabled();AcDbObject::dwgOutFields(pFiler);if (pFiler->filerType()==AcDb::kWblockCloneFiler)pFiler->writeHardPointerId((AcDbHardPointerId)ownerId());上叙两个函数是用来写入写出自定义实体的成员变量的,以保证在拖动夹点的过程中这些变量是实时变化的(可以在worldDraw或moveGripPointsAt中改变这些值)。

ObjectARX开发常用资料

ObjectARX开发常用资料

ARX开发常用资料一、ADS函数与ARX函数对比 (2)二、ARX里定义的数据类型 (10)三、结果类型码 (11)四、函数返回结果类型代码: (12)五、其它代码 (12)六、用户输入控制位代码:由函数acedInitGet()先发控制 (13)七、对象捕捉编码及设置对象捕捉代码 (13)八、CAD环境变量 (14)一、ADS函数与ARX函数对比二、ARX里定义的数据类型三、结果类型码四、函数返回结果类型代码:五、其它代码六、用户输入控制位代码:由函数acedInitGet()先发控制七、对象捕捉编码及设置对象捕捉代码ObjectArx修改捕捉模式实现方式//获取捕捉模式struct resbuf rb;acedGetVar(_T("osmode"), &rb);//设置捕捉模式struct resbuf *newsnap;newsnap=ads_buildlist(RTSHORT,n,0);acedSetVar(_T("osmode"), newsnap);acutRelRb(newsnap);八、CAD环境变量所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制。

CAD有很多的变量,例如FILL或FILLMODE控制填充的显示,ATTMODE控制块属性的显示,等等,了解一些常用的系统变量,当你的图纸出现一些问题时,你可以对出现问题的原因有些初步的判断,并可以通过修改变量设置快速解决。

在CAD(无论是AUTOCAD 还是浩辰CAD等其他CAD)的帮助中通常有可以系统变量的介绍,随时到帮助查询也非常方便。

我在网上看到一个CAD系统变量大全,放到这里,希望对您了解系统变量的作用有点帮助。

CAD的系统变量非常多,我们不可能记住所有变量的作用,我会用红色将一些大家可能会用到的变量标示出来,如果这个变量在对话框中无法设置,建议大家关注或记住,其他变量大家如果有需要时可以再查帮助或打开这篇博文里来查一查。

ObjectARX环境下的结构建模系统的开发

ObjectARX环境下的结构建模系统的开发

ObjectARX环境下的结构建模系统的开发摘要本文介绍了AutoCAD提供的ObjectARX开发环境,阐述了利用ObjectARX 开发一种新的结构建模系统的思路及方法,即直接利用绘图工具进行结构信息输入。

输入的结构信息可以生成为不同的数据文件,从而大大提高工作效率。

关键词结构建模 ObjectARX 面向对象前言近年来,随着计算机技术的飞速发展,绝大多数的工程设计人员已经采用计算机来进行建筑结构的分析和设计。

在实际应用中,有众多的结构分析软件可供选择,如ANSYS、SAP2000等。

这些软件虽然都能较好地完成分析任务,但它们基本上都是按传统的编程方法实现的,其前后处理功能还有待进一步改进。

结构分析软件中的前后处理部分通常是用户耗时最多的阶段,尤其是结构建模部分更是关键,它直接影响着软件的应用效率。

因此,对结构建模这一功能模块进行专门的研究和开发,使其拥有更强的功能和更高的效率,成为了建筑结构设计及软件开发人员的重点课题。

利用纯Windows风格的AutoCAD2000提供的开发环境ObjectARX来进行结构建模系统的研制,可以充分利用面向对象编程技术的优势,最大限度地提高系统资源的利用率和软件系统的功能,而且也符合广大工程设计人员的使用习惯,有助于设计人员快速地掌握、使用新开发的结构建模系统,提高工作效率。

1 面向对象的开发环境ObjectARXAutoCAD是目前在Windows 98/2000/NT 环境下应用最广泛、使用人数最多的CAD软件,它是广大工程设计人员最为熟悉的工作平台。

AutoCAD2000除了提供一般通用的CAD 功能,如绘图、编辑等,还为用户提供了不同的开发环境,如AutoLISP、VisualLISP、ObjectARX等。

其中,ObjectARX是一种特定的C++编程环境,它是在AutoCAD R13使用的ARX的基础上发展起来的第二代面向对象的编程环境。

ObjectARX应用程序本质上是Windows DLL程序,而AutoCAD本身则是一个典型的Windows程序,因此ObjectARX 应用程序与AutoCAD、Windows之间均采用Windows的消息传递机制直接通信。

ObjectARX开发教程(转)——第1课:概述

ObjectARX开发教程(转)——第1课:概述

ObjectARX开发教程(转)——第1课:概述第1课:概述介绍ObjectARX是AutoCAD运⾏时扩展。

使⽤ObjectARX SDK(软件开发⼯具包),您可以构建应⽤程序,以⽀持AutoCAD功能的开发,例如命令,对话框,实体,对象等。

ObjectARX应⽤程序本质上是⼀个动态链接的DLL库,可以将其加载到AutoCAD⼯作环境中,并允许您如上所述访问属性。

为了能够构建DLL库,在安装Microsoft Visual Studio .NET环境时需要遵循⼀些强制性规则,并确保该应⽤程序已被AutoCAD批准。

此应⽤程序的实现与本机功能相同。

这样,Autodesk⽤户可以使⽤ObjectARX直接构建您已经知道的产品,例如Autodesk MAP和Architectural Desktop等。

⽤户要求由于ObjectARX不是根据⽤户要求的简单⼯具,因此需要⼤量的精⼒和某些技能。

如果您不这样做,我建议您先学习更多的技能,然后再返回以继续该课程。

学习ObjectARX的最低要求基本上是:Visual Studio .NET基础;有点C ++知识;AutoCAD的⾼级知识;MFC概念(Microsoft基础类);⾯向对象技术(Objective-iented Techniques);话虽如此,本课程不是复杂的教程,也不是针对⾼级功能的。

我相信在学习了ObjectARX的基础知识和关键概念之后,您可以⾃⼰进⼀步发展。

我不会关注.NET使本课程尽可能简单的功能。

⼀旦您从内部学习并了解了AutoCAD的⼯作原理,您将了解ObjectARX的功能并能够构建出⾊的应⽤程序!如何使⽤ObjectARX SDK下载ObjectARX SDK并将其解压缩到硬盘后,您将在其中找到以下⽬录:\ arxlabs:⽬录包含代表ObjectARX不同⽅⾯的库(实验室)。

\ classmap:包含AutoCAD图形以及ObjectARX对象层次树的⽬录。

AUTOCAD二次开发笔记(ObjectARX)---全部

AUTOCAD二次开发笔记(ObjectARX)---全部

AUTOCAD二次开发笔记(ObjectARX)---全部编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(AUTOCAD二次开发笔记(ObjectARX)---全部)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为AUTOCAD二次开发笔记(ObjectARX)---全部的全部内容。

ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008)在一个做CAD二次开发的公司做Web开发,感觉可提升的空间很小。

有必要研究一下公司的产品开发,以利发展。

一、首先安装好vs05与cad2008安装cad的时候也没有什么特别,加载到虚拟光驱,安装过程中有个错误提示,不影响继续。

二、安装ObjectArx2008直接打开解压缩到某个目录即可。

比如C:\ObjectARX 2008然后打开C:\ObjectARX 2008\utils\ObjARXWiz目录,运行ArxWizards.msi这样在新建C++项目的时候会出现ObjectARX项目,如图三、包含文件工具—〉选项—>项目和解决方案-〉VC++目录,如图所示:包含文件(添加图中前两个目录即可)库文件(添加图中前两个目录即可)四、新建ObjectARX项目,完成后添加MFC支持,如图所示:然后直接点finish打开acrxEntryPoint.cpp点击左上角的a>按钮,然后新建一个命令。

如图:只需要修改Internation Name与Localized Name为testcmd即可添加完成后,会在acrxEntryPoint。

objectarx 开发人员手册

objectarx 开发人员手册

ObjectARX开发人员手册目录一、ObjectARX开发简介1.1 什么是ObjectARX?1.2 ObjectARX的应用领域1.3 ObjectARX的基本原理1.4 ObjectARX的发展历程二、ObjectARX环境搭建2.1 开发环境准备2.2 ObjectARX SDK安装2.3 开发工具选择2.4 环境配置及注意事项三、ObjectARX开发入门3.1 基本概念及术语3.2 ObjectARX编程框架3.3 第一个ObjectARX程序四、ObjectARX开发核心知识4.1 对象模型4.2 数据访问和修改4.3 事件处理4.4 自定义命令和操作4.5 交互式绘图五、ObjectARX开发高级技巧5.1 高效数据管理5.2 多线程编程5.3 性能优化5.4 构建扩展应用程序六、ObjectARX开发实例6.1 绘图应用实例6.2 数据处理应用实例6.3 CAD环境集成实例6.4 其他领域实例七、ObjectARX开发注意事项7.1 内存管理7.2 线程安全7.3 安全性考虑7.4 与AutoCAD版本兼容性7.5 其他注意事项八、ObjectARX开发资源8.1 冠方文档和教程8.2 开发社区和论坛8.3 第三方扩展库8.4 实用工具和示例九、ObjectARX开发未来展望9.1 行业发展趋势9.2 技术更新和发展9.3 ObjectARX的发展方向一、ObjectARX开发简介1.1 什么是ObjectARX?ObjectARX是AutoCAD的二次开发接口,简单来说,它是AutoCAD的扩展开发评台。

通过ObjectARX,开发者可以利用C++、C#、VB等语言编写自定义应用程序,扩展和定制AutoCAD的功能,实现各种与CAD相关的应用开发。

1.2 ObjectARX的应用领域ObjectARX广泛应用于工程设计、土木工程、建筑设计、机械设计等领域。

开发者可以利用ObjectARX开发CAD扩展功能、自定义命令、数据处理工具、智能绘图等应用,帮助用户提高工作效率,满足特定行业的需求。

ObjectARX开发常用资料

ARX开发常用资料一、ADS函数与ARX函数对比 (2)二、ARX里定义的数据类型 (10)三、结果类型码 (11)四、函数返回结果类型代码: (12)五、其它代码 (12)六、用户输入控制位代码:由函数acedInitGet()先发控制 (13)七、对象捕捉编码及设置对象捕捉代码 (13)八、CAD环境变量 (14)一、ADS函数与ARX函数对比二、ARX里定义的数据类型三、结果类型码四、函数返回结果类型代码:五、其它代码六、用户输入控制位代码:由函数acedInitGet()先发控制七、对象捕捉编码及设置对象捕捉代码ObjectArx修改捕捉模式实现方式//获取捕捉模式struct resbuf rb;acedGetVar(_T("osmode"), &rb);//设置捕捉模式struct resbuf *newsnap;newsnap=ads_buildlist(RTSHORT,n,0);acedSetVar(_T("osmode"), newsnap);acutRelRb(newsnap);八、CAD环境变量所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制。

CAD有很多的变量,例如FILL或FILLMODE控制填充的显示,ATTMODE控制块属性的显示,等等,了解一些常用的系统变量,当你的图纸出现一些问题时,你可以对出现问题的原因有些初步的判断,并可以通过修改变量设置快速解决。

在CAD(无论是AUTOCAD 还是浩辰CAD等其他CAD)的帮助中通常有可以系统变量的介绍,随时到帮助查询也非常方便。

我在网上看到一个CAD系统变量大全,放到这里,希望对您了解系统变量的作用有点帮助。

CAD的系统变量非常多,我们不可能记住所有变量的作用,我会用红色将一些大家可能会用到的变量标示出来,如果这个变量在对话框中无法设置,建议大家关注或记住,其他变量大家如果有需要时可以再查帮助或打开这篇博文里来查一查。

CAD系统二次开发-ObjectARX中的实体造型技术解析

① 调用AcDb3dSolid类创建一个容器对象,如: AcDb3dSolid *p3dObj=new AcDb3dSolid; ② 调用AcDb3dSolid类的成员函数创建基本三维实体对象,一般形式为: 指向AcDb3dSolid类对象的指针->创建基本的三维三体对象成员函数。 ③ 将AcDb3dSolid类对象写入当前图形数据库的块表记录中。
一、基本三维实体生成技术
3、生成基本三维实体的函数
基本的三维实体是指长方体(Box)、平截头体(Frustum)、球体(Sphere)、 圆环体(Torus) 、契体(Wedge)等,生成向营实体的AcDb3dSolid函数原型为: ①、长方体:生成一个中心在坐标原点,长、宽、高分别与X、Y、Z轴平 行的长方体,函数原型如下: virtual Acad::ErrorStatus ateBox(double xLen,double yLen,double zLen); 如果长方体的边长小于1E-6,函数返回Acad::eOutOfRange,如果生成失 败,函数返回Acad::eGeneralModelingFailure。
一、基本三维实体生成技术
3、生成基本三维实体的函数
③、球体:生成一个质心在WCS坐标原点的球体。函数原型如下:
virtual Acad::ErrorStatus createSphere(double radius);
④、圆环体:生成一个质心在WCS坐标原点的圆环体,Z轴为圆环中心线。 函数原型如下: virtual Acad::ErrorStatus createTorus(double majorRadius,double minorRadius); 其中MajorRadius、minorRadius分别代表圆环半径和圆管半径。

(完整版)ObjectARX学习笔记

一、CAD 版本和VC++的版本对应 (1)二、ObjectARX 实体创建 (1)三、创建直线实例 (1)五、修改图形对象的属性 (2)1、打开图形数据库的对象 (2)2、修改直线颜色实例 (3)六、用类组织函数 (4)七、提高CreateLine 函数的可重用性 (8)八、升级Visual Studio 试用版到正式版 (12)九、创建圆 (13)十、创建圆弧(“三点法”,“起点、圆心、终点法”,“起点、圆心、圆弧角度法”) (18)//添加计算常量的值的函数 (20)十一、创建多段线 (23)十二、创建正多边形 (25)一、CAD 版本和VC++的版本对应AutoCADVisual Studio2000——2002 VC6.02004——2006 VC7.0(2002)2007——2009 VC8.0(VC2005)2010——1012 VC20082013——2014 VC2010二、ObjectARX 实体创建1、注册一条直线命令2、在命令函数中添加创建直线对象函数(AcDbLine 类)AcGePoint3d ptStart();AcGePoint3d ptEnd();AcDbLine *pLine=new AcDbLine(ptStart,ptEnd);3 在命令函数中添加获得指向块表的指针相关代码AcDbBlockeTable *pBlockTable;acdbHostApplicationServices()->WorkingDataBase()->getBlockTable(pBlockTable,AcDb::kForRead);4、在命令函数中添加获得指向特定块表记录的指针的相关代码AcDbBlockTableRecord *pBlockTableRecord;pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);5、在命令函数中添加向块表记录中附加实体代码AcDbObjectId lineId;pBlockTabelRecord->appendAcDbEntity(lineId,pLine);6、在命令函数中添加关闭图形数据库各种对象的代码pBlockTable->close();pBlockTableRecord->close();pLine->close();三、创建直线实例Comme定义的执行结Acad::ErrorStatusnt [M1]: 一个在结构Acad 中表示函数的果四、五、修改图形对象的属性1、打开图形数据库的对象acdbOpenAcDbEntity(AcDbEntity *&pEnt,AcDbObjectIdErrorStatus枚举#include "StdAfx.h"lineId=CreatLine(); //修改直线颜色ChangeColor(lineId,1); }Comment [M3]: 这些函数都是放在acrxEntryPoint.cpp 文件中 Comment [M4]: 包含六、用类组织函数1、新建 ObjectARX 项目 CreatEnt2、新建两个 C++类 CreatEnt 和 ModifyEnt下头文件同用这个类保存创建实体的函数头文件#pragma once #include "StdAfx.h"CCreatEnt::~CCreatEnt(void){}AcDbObjectId CCreatEnt::CreatLine(){//在内存上创建一个新的AcDbLine对象AcGePoint3d ptStart(0,0,0);AcGePoint3d ptEnd(100,100,0);AcDbLine *pLine=new AcDbLine(ptStart,ptEnd);//获得指向块表的指针AcDbBlockTable *pBlockTable;acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);//获得指向特定块表记录的指针AcDbBlockTableRecord *pBlockTableRecord;pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);//将对象添加到块表记录中AcDbObjectId lineId;pBlockTableRecord->appendAcDbEntity(lineId,pLine);//关闭图形数据库的各种对象pBlockTable->close();pBlockTableRecord->close();pLine->close();return lineId;}头文件#pragma once#include "StdAfx.h"class CModifyEnt{public:CModifyEnt(void);~CModifyEnt(void);static Acad::ErrorStatus ChangeColor(AcDbObjectId entId,Adesk::UInt16 colorIndex); };源文件#include "StdAfx.h"#include "ModifyEnt.h"CModifyEnt::CModifyEnt(void){}CModifyEnt::~CModifyEnt(void){}Acad::ErrorStatus CModifyEnt::ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex) {AcDbEntity *pEntity;//打开图形数据库中的对象acdbOpenObject(pEntity,entId,AcDb::kForWrite);//修改实体颜色pEntity->setColorIndex(colorIndex);//关闭实体对象pEntity->close();return Acad::eOk;}AcrxEntryPoint.cpp// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------// ----- acrxEntryPoint.cpp//-----------------------------------------------------------------------------#include "StdAfx.h"#include "resource.h"//修改直线颜色CModifyEnt::ChangeColor(lineId,1);}} ;Comment [M6]://-----------------------------------------------------------------------------IMPLEMENT_ARX_ENTRYPOINT(CCreatEntsApp)ACED_ARXCOMMAND_ENTRY_AUTO(CCreatEntsApp, mshlCreatEnts, ChangeColor, ChangeColor,ACRX_CMD_TRANSPARENT, NULL)七、提高CreateLine 函数的可重用性添加类CCreateEnt于是,CCreateEnt 类现在包含了两个静态成员函数:头文件#pragma once// 要包含 StdAfx#include "StdAfx.h"class CCreateLine{public:CCreateLine(void);~CCreateLine(void);};static AcDbObjectId PostToModelSpace(AcDbEntity *pEnt);static AcDbObjectId CreateL(AcGePoint3d ptStart,AcGePoint3d ptEnd);AcDbLine *pLine=new AcDbLine(ptStart,ptEnd);//AcDbObjectId lineId;lineId= CCreateLine::PostToModelSpace(pLine);return lineId;}AcDbObjectId CCreateLine::PostToModelSpace(AcDbEntity *pEnt){AcDbBlockTable *pBlockTable;acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);AcDbBlockTableRecord *pBlockTableRecord;pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);AcDbObjectId entId;pBlockTableRecord->appendAcDbEntity(entId,pEnt);pBlockTable->close();pBlockTableRecord->close();pEnt->close();return entId;}acrxEntryPoint.cpp// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------// - mshlfengzhuanglei.AddLine command (do not rename)static void mshlfengzhuangleiAddLine(void){// Add your code for command mshlfengzhuanglei.AddLine hereAcGePoint3d ptStart(0,0,0);AcGePoint3d ptEnd(100,100,0);AcDbObjectId lineId;lineId=CCreateLine::CreateL(ptStart,ptEnd);}} ;//----------------------------------------------------------------------------- IMPLEMENT_ARX_ENTRYPOINT(CArxProject1App)ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, mshlfengzhuanglei, AddLine, AddLine, ACRX_CMD_MODAL, NULL)2013/11/27八、升级Visual Studio 试用版到正式版VS2008 注册方法:非常简单,在开始>设置>控制面版>添加或删除程序>卸载2008(名字不太记得了)>出现卸载界面>点击Next>输入上面CD-key ->出现成功画面即可完美将试用版升级成为正式版。

第二章ObjectARX类库简介

第⼆章ObjectARX类库简介ObjectARX环境包含下列⼏组类和函数:AcRx ⽤于绑定应⽤程序及运⾏时类的注册和标识的类。

AutoCAD Registration Extension;AcEd 注册本地AutoCAD命令和AutoACD事件通知的类。

AutoCAD Envent Directory;AcDb AutoCAD数据库类。

AutoCAD DataBase ;AcGi 显⽰AutoACD实体的图形类。

 AutoCAD Graph Interface;AcGe 公⽤线性数学和⼏何学对象应⽤类。

AutoCAD Geometry Entity;AcRx库提供了⼀些系统级类,⽤于DLL的初始化和链接及运⾏时类的注册和标识。

该库的基类是AcRxObject,它提供如下功能:对象运⾏时类标识和继承分析、运⾏时向既有类添加新协议、对象⽐较测试、对象复制。

运⾏时类型标识是AcRxObject的每个⼦类都有⼀个相关的类描述者对象(AcRxClass类型),⽤于运⾏时类型的标识。

最常⽤函数:AcRxObject::isA(); ⽤于类识别,被识别的类必须能够测试其类型。

AcRxObject::isKindOf(); 也是⽤于类识别,但这⾥的类能够被测试其类型,或者测试其派⽣类的类型。

AcRxObject::desc(); 返回类名。

AcRxObject::cast(); 试图将⼀个基类转换成更⾼级的类。

如果转换成功,基类对象的指针将是转换后类型的指针。

该库也可以对应⽤程序进⾏加锁或解锁。

使⽤函数::acrxUnlockApplication()可以使应⽤程序不可卸载。

AcEd库提供定义和注册新的AutoCAD命令的类,新命令的操作性能与AutoCAD内部命令是完全⼀样的。

我们定义的新命令被当作本地命令是因为它们与AutoACD内部命令具有相同的内部结构(AcEdCommandStack)。

AcEd库还提供编辑器反应器和⼀套与AutoCAD通信的全局函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

30
© 2005 Autodesk
命令机制 I
4. AcEdCommandStack 2,3. 5. 6. 回调函数
1.
.ARX
AcEdCommand
AutoCAD
1. 添加命令 2. 创建一个命令对象 3. 参数化对象 4. 用户调用命令 5. 查找命令对象 6. 调用回调函数
31
© 2005 Autodesk
可用的程序开发接口

ObjectARX COM Automation (VB, Java, Delphi, etc.) AutoLISP .NET 托管 API
AutoCAD自带的集成开发环境

Visual LISP Visual Basic, Applications Edition (VBA)
11
© 2005 Autodesk
AutoCAD API执行过程
.NET VisualLISP COM VBA (进程内) COM 客户端 (进程外)
acdbmgd.dll acmgd.dll
vl.arx
acvba.arx
axdb.dll
ObjectARX API
COM
AutoCAD
12
© 2005 Autodesk
Rxapi.lib
AutoCAD 1.
.ARX 2.
4.
2. _DllMainCRTStartup (C/C++ 运行库的入口函数) 3. CRT_INIT (初始化C/C++运行库和静态全局变量) 4. DllMain (see MSDN for info) 5. acrxGetApiVersion 6. acrxEntryPoint
Time in seconds
ObjectARX .NET LISP
14
© 2005 Autodesk
在AutoCAD中存储数据
不同API方式பைடு நூலகம்比较
数据容器存储性能比较
140000
Time in seconds
120000 100000 80000 60000 40000 20000 0 Xrecord Xdata ObjectARX .NET LISP VBA VB
ObjectARX
23
© 2005 Autodesk
ObjectARX SDK 内容
SDK包含: 库文件和头文件 开发文档 示例程序 实用工具
24
© 2005 Autodesk
.ARX = .DLL + 2 输出函数


acrxEntryPoint acrxGetApiVersion
32
© 2005 Autodesk
与AutoCAD关系
Display drv Plotter drvInput drv Input acquisition PlotHDI
AutoCAD
2D graphics cache (WHIP!)
HEIDI
3D graphics cache
ObjectDBX
Legend:
.DLL .ARX
ObjectARX APIs API
.ARX .DLL
.EXE AutoCAD
25
© 2005 Autodesk
主要的库 - I
AcRx 对象和类管理库 (rxapi.lib) AcEd AutoCAD 编辑器工具库 (acedapi.lib) AcDb AutoCAD 数据库对象库 (acdb17.lib) AcGi AutoCAD 图形接口库 (acgiapi.lib) AcGe AutoCAD 几何库 (acge17.lib)
6
© 2005 Autodesk
API 包装
Client EXE, DLL, script, etc.
ATL templates
API 1
4 API
Application.exe
3 API
2
API
Static MFC Library
Win 32 API DLLs 1. 源代码 3. DLL 2. 静态库 4. EXE
27
© 2005 Autodesk
主要的库 - III
ASI - ACAD SQL 接口 (asiapi17.lib) ASE - ACAD SQL 环境 (aseapi17.lib) ISM 图象支持模块 (acismobj17.lib)
28
© 2005 Autodesk
加载 ObjectARX 程序 I
22
© 2005 Autodesk
如何得到ObjectARX
SDK ( Software Development Kits)
免费下载
(SDK)
Autodesk 网站 / 检索 ObjectARX /adsk/servlet/item?siteID=123112&id=773180
COM (VB)
COM (VBA)
LISP
Create 1000 Circles
ObjectARX
Cre
Cre
Upd
AutoCAD's APIs
Add
Cre
Tota
13
© 2005 Autodesk
在AutoCAD中存储数据
不同API方式的比较
数据容器存储性能比较
400 350 300 250 200 150 100 50 0 Xrecord Custom Object Xdata
API 比较结果
速度

ObjectARX, .NET, VBA
功能

ObjectARX , .NET (除了自定义实体)
易用性

.NET , VBA
容易入门

.NET, VBA
17
© 2005 Autodesk
ObjectARX的优势
效率高 功能强 计算精度高 适用开发复杂的大型程序 调试方便
ObjectARX SDK (free, /objectarx) RealDWG - ObjectDBX ADF (licensed, /adc) Plot DDK (licensed, /adn-devhelp) HEIDI DDK (licensed, /heidi) WinTab DDK (free, )
26
© 2005 Autodesk
主要的库 - II
AcUi/AdUi MFC 扩展库 (adui17.lib acui17.lib) 自动化库(Automation) (axdb.lib oleaprot.lib) Internet 超链接库 (achapi17.lib) ADS 函数集 (acad.lib) 静态连接内存管理库 (rxheap.lib)
编辑和扩展图形数据库 创建/编辑/删除对象 创建新的对象类型 编辑 AutoCAD 用户接口 命令 工具条/对话框 属性面板 设计中心 显示系统
监控/编辑 AutoCAD 标准的行为 事件通知 输入点获取
21
© 2005 Autodesk
开发环境
Windows Server 2003, Service Pack 1, Windows® XP Professional, Service Pack 1 or 2, or Windows 2000, Service Pack 4 Microsoft Visual C++® 2005 (Version 8.0) Pentium® IV or later 512 MB RAM 1024 x 768 VGA with True Color (minimum)
7
© 2005 Autodesk
客户端/服务器端交互
进程内

客户端/服务器端在同一进程
本地

客户端/服务器端在同一机器
远程

客户端/服务器端在同一网络
8
© 2005 Autodesk
嵌入架构
API被 可执行程序(宿主程序)执行 客户端通常为dll
.DLL .ARX
ObjectARX APIs API
命令机制 II
移出命令和添加命令一样重要 命令名称可能冲突 命令属于不同的命令组(解决命令冲突的方法) 命令组必须是唯一的 Registered Developer Symbol (RDS)
/solution/partners/adn/symbols/index.htm
AutoCAD API 性能比较
100.00 90.00 80.00 70.00
S.0.58 API Performance
Seconds
60.00 50.00 40.00 30.00 20.00 10.00 0.00
Total Create 1000 2dPolylines Add XData to 1000 Entities Update 1000 Circles Create 1000 lines
.ARX .DLL
.EXE AutoCAD
9
© 2005 Autodesk
客户端代码形式

解释代码

代码脚本-AutoLISP
封装代码

预处理, 半解释代码-编译后的 Visual LISP
编译代码

编译器指令代码-ObjectARX

10
© 2005 Autodesk
AutoCAD API和集成开发环境
18
© 2005 Autodesk
课程进度

API 概览 ObjectARX基本知识 用户交互和选择集 数据库操作 实体对象操作和事务 扩充数据 反应器 几何类的使用 用户界面 自定义对象
相关文档
最新文档