3、ObjectARX开发创建直线、圆、圆弧和修改对象属性

一、本节课程


Arx二次开发创建直线、圆、圆弧和修改对象属性

二、本节要讲解的知识点

1、如何应用C++ ARX二次开发创建直线。

2、如何应用C++ ARX二次开发创建圆。

3、如何应用C++ ARX二次开发创建圆弧。

4、如何修改对象的属性。

5、腾讯课堂云幽学院详细的内容讲解。

三、具体内容

1、创建一条直线,直线的起点是(0,0,0),直线的终点(100,100,0)。

2、表:表是数据库的组成单位,一个数据库至少含有一个表。

3、记录:记录是表的组成单位,一个表可能含有多个记录,也可能不包含任何记录。

4、用一个图来描述AUTOCAD图形数据库的基本结构。

5、创建图形对象的步骤:

(1)确定要创建对象的图形数据库:acdbHostApplicationServices->workingDatabase()

(2)获得这个图形数据库的块表:->getBlockTable(块表指针,打开的方式)

(3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记录里面。

(4)创建实体类对象,将该对象附加到特定的块表记录中。

6、创建命令需要修改两个地方:拷贝模板提供的代码,将里面的命令修改成自己想要定义的命令名字(命令的全局名和本地名)。

实现命令的函数:static void YunyouMyGroupCreateLine (),命令函数名字由三部分组成,包括前缀标识“Yunyou”,命令组的名字“MyGroup”、命令名字“CreateLine”。

7、创建直线的实现代码如下


static AcDbObjectId  YunyouMyGroupCreateLine ()

{

//(1)确定要创建对象的图形数据库:acdbHostApplicationServices()->workingDatabase()

//(2)获得这个图形数据库的块表:acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);

//(3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记录里面:pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite)

//(4)创建实体类对象,将该对象附加到特定的块表记录中。 AcDbLine *pLine=new AcDbLine(ptStart,ptEnd); pBlockTableRecord->appendAcDbEntity(lineId,pLine);

//关闭我们实体、块表记录、块表。否则导致致命错误AUTOCAD的退出。

AcGePoint3d ptStart(0,0,0);

AcGePoint3d ptEnd(100,100,0);

AcDbLine *pLine=new AcDbLine(ptStart,ptEnd);

AcDbBlockTable *pBlockTable=NULL;

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;

}

8、对于高版本(AutoCAD2016及以上)来说,编译后生成的ARX文件需要放置在AUTOCAD的安装目录或者其目录下,在加载ARX时就不会有“安全性提示”。

9、加载ARX: 在命令行ARX 回车 Load,  APPLOAD

10、调用命令:CreateLine,效果如下:

在模型空间创建了一条直线,直线的起点是(0,0,0)直线的终点是(100,100,0)。

11、修改对象属性的思路:需要打开图形数据库的对象,AcDbObjectId

打开和关闭图形数据库的对象:

(1)acdbOpenAcDbEntity适用于打开继承于AcDbEntity的数据库常驻对象。

Acad::ErrorStatus acdbOpenAcDbEntity(

AcDbEntity*& pEnt,

AcDbObjectId id,

AcDb::OpenMode mode,

bool openErasedEntity = false

);

(2)acdbOpenAcDbObject适合于打开未继承于AcDbEntity的数据库常驻对象。

Acad::ErrorStatus acdbOpenAcDbObject(

AcDbObject*& pObj,

AcDbObjectId id,

AcDb::OpenMode mode,

bool openErasedObject = false

);

(3)acdbOpenObject不知道要打开的对象是否继承于AcDbEntity时采用此方法。

ACDB_PORT Acad::ErrorStatus acdbOpenObject(

AcDbObject*& pObj,

AcDbObjectId id,

AcDb::OpenMode mode,

bool openErased = false,

const AcRxClass * pClass = nullptr

);

打开对象之后使用close()方法将其关闭。

12、ID(AcDbObjectId)、指针、句柄(handle)、和ads_name
(1)ID:AcDbObjectId,在一个AUTOCAD任务中,可能会加载有多个图形数据库,但是所有对象的ID在这次任务中都是独一无二的,在不同任务中,同一图形对象的ID可能不同。适合编程使用。

(2)句柄:handle,在一个DWG图形文件里面是唯一的,但是不同的DWG文件句柄有可能重复。句柄随DWG文件一起保存的,两次任务中同一对象的句柄是相同的。

(3)ads_name :不稳定的,在AUTOCAD中的一个特定图形中工作时可以使用,一旦退出AUTOCAD或者切换到另外一个图形,就会消失。

13、转化问题:

(1) ID-->对象指针:acdbOpenAcDbEntity、acdbOpenAcDbObject、acdbOpenObject

(2) 对象指针->ID:所有的对象都继承于AcDbObject,包含了一个叫做objectId()的函数可以获取到对象的指针。

(3) 句柄到ID:AcDbDataBase:getAcDbObjectId.

(4) ID到句柄:使用AcDbObjectId的handle函数。

(5) 指针到句柄:AcdbObject的getAcDbHandle函数

(6) ads_name到ID:使用全局函数acdbGetObjectId

(7) ID到ads_name:使用全局函数acdbGetAdsName。

四、总结

(1)图形数据库组成单位是表,表的组成单位是记录,实体包含在块表记录里面,要创建实体的步骤是:需要确定图形数据库,打开块表,获取特定的块表记录(通常来说就是模型空间),创建实体,并将实体添加到块表记录里面。

(2)高版本的ARX模块如果不在AUTOCAD“内部路径”则会有安全性提示,建议开发阶段将生成的文件放置于AUTOCAD安装路径的子目录中,避免恼人提示。

(3)几种标识:  ID\句柄\ads_name\对象指针,特点以及如何使用、如何转换。

原文地址:https://www.cnblogs.com/yunyouxy/p/objectarx_line.html

时间: 2024-08-28 14:28:56

3、ObjectARX开发创建直线、圆、圆弧和修改对象属性的相关文章

关于Entity Framework采用DB First模式创建后的实体批量修改相关属性技巧

Entity Framework采用DB First模式创建实体是比较容易与方便的,修改已创建的实体在个数不多的情况下也是没问题的,但如果已创建的实体比较多,比如10个实体以上,涉及修改的地方比较多的时候,那么这个时候采用可视化编器就不再那么方便了,而应该采用以XML的形式来呈现实体数据,然后用我们常用的编辑手段,复制.粘贴.剪切来快速实现批量修改,下面就来说说批量修改的方法: 1.找到Entity Framework采用DB First模式创建的文件,文件以.edmx结尾,如下图示: 2.选中

PowerShell 创建,查看和保存嵌套的对象属性

PowerShell 创建对象的时候,对象的属性可以是单一属性,也可以在这个属性里面包括多个对象,也就是嵌套的对象属性. 怎么实现嵌套的对象呢,下面看个简单的例子. 首先我写了两个function,分别是获取磁盘信息和服务. Function Get-DiskInfo { [cmdletbinding()] Param ( [parameter(Mandatory=$true,                     ValueFromPipeline=$true)] [string[]]$co

创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。

编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型): // 存放圆的半径: ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) //创建Circle对象时将半径初始化为r ③ 三个成员方法 double getArea( ) //计算圆的面积 double getPerimeter( ) //计算圆的周长 void show( ) //将圆的半径.周长.面积输出到屏幕 编写应用程序,创建类的对象,分别设置圆的半径计算并分别显

FreeCAD二次开发-Part.LineSegment创建直线

from FreeCAD import Base # 点坐标 V1 = Base.Vector(0,10,0) V2 = Base.Vector(30,10,0) V3 = Base.Vector(30,-10,0) V4 = Base.Vector(0,-10,0) VC1 = Base.Vector(-10,0,0) VC2 = Base.Vector(40,0,0) # 创建圆弧 C1 = Part.Arc(V1,VC1,V4) C2 = Part.Arc(V2,VC2,V3) # 创建直

4、c++ Arx二次开发创建多段线

一.本节课程 c++ Arx二次开发创建多段线 二.本节要讲解的知识点 如何应用C++ ARX二次开发创建多段线(AcDbPolyline.AcDb2dPolyLine.AcDb3dPolyline的使用) 三.具体内容 1.ARX提供了三种多段线相关的类:AcDbPolyline.AcDb2dPolyLine.AcDb3dPolyline.PLINE 创建的是AcDbPolyline,3DPOLY创建AcDb3dPolyline.创建一般的轻量多段线只需要调用AcDbPolyline的构造函数

5.c++ Arx二次开发创建椭圆和样条曲线

一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2.如何应用C++ ARX二次开发创建样条曲线(对AcDbSpline类的构造函数的直接封装) 三.具体内容 1.创建椭圆的思路 有参数构造函数:AcDbEllipse( const AcGePoint3d& center, const AcGeVector3d& unitNormal, con

IOS开发创建开发证书及发布App应用(二)——创建证书

源于:http://www.jkqnb.com/ydkf/article/27 预览图 2. 创建证书 证书分为两种, 一种是开发者证书,主要是用来真机调试的 另一种就是发布证书,就是用来发布应用的, 最好是两种都要下载,不然编译时候可能报错,我猜想可能苹果怕你没用真机调试 创建证书分为两个步骤: 在苹果电脑生成证书签名公钥 提交证书公钥文件到开发者网站 1)  创建开发者证书  1.生成证书签名公钥 在有Mac OS X的操作系统中打开"应用程序" -- "实用工具&quo

JAVA card 应用开发 创建第一个APPLET

本文讲述在Eclipse环境下,如何创建一个Java卡的项目,新建一个APPLET,运行在Java卡片上. 在建立项目前,必须安装好环境:先下载一个Eclipse,然后安装JCOP即可.(JCOP的下载,需要与NXP签订协议才能拿到安装文件,当然网上可能找到别的版本,这里不讨论).安装次序:安装好Eclipse,然后安装JCOP,然后导入JCOP的授权文件.也可以参考下面这篇文章: 环境搭建:http://blog.csdn.net/menghnhhuan/article/details/761

微信公众平台自定义菜单开发——创建菜单

自己从不会到最后做出来,所以好东西必须分享,所以我就给大家写一下过程 1.首先必须是成为微信的开发者,这样才有AppId 和AppSecret 2步就是获取access_token 在你的浏览器上输入https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET (注意连接中得appid=APPID&secret=APPSECRET 分别是你自己在微信