四、ObjectARX 修改对象的属性
环境:vs2008+ObjectARX 2010 +CAD2010 64位
上个博客中,如果在最后一行(close函数之前)添加上pLine->setColorIndex(1);
我们所创立的直线就会变成红色。
但是那是在对象关闭之前进行创建的,这一次,我们通过对象的ID号,进行改变我们对象的颜色的程序。
*******************************************************************************
AcDbBlockTableRecord 类的 appendAcDbEntity 函数能够将一个实体添加到图形数据库中,并且返回分配给该实体的 ID,这个函数上一节已经介绍过;全局函数acdbOpenAcDbEntity 用于从实体的 ID 号获得指向图形数据库中实体的指针,其定义为:
Acad::ErrorStatus acdbOpenAcDbEntity(
AcDbEntity*& pEnt,
AcDbObjectId id,
AcDb::OpenMode mode,
bool openErasedEntity = false);
第一个参数返回指向图形数据库实体的指针;
第二个参数输入了要获得的实体的 ID 号;
第三个参数指定了打开该实体的方式,如果仅是查询该实体的特性用“读”模式打开即可,
要修改实体的特性就必须用“写”模式打开;
第四个参数指定是否允许访问一个已经被删除
的实体。
访问实体的特性必须通过对象指针,但是一旦你获得了实体的ID、句柄或者ads_name,都能通过ID作中介而获得对象的指针。
改变的步骤如下:
利用向导创建一个ObjectARX工程
在入口点函数:
中AcrxEntryPoint.cpp中插入 创建一个新的命令行,所有的参数跟之前一样,名字为ChangeColor
将上一张博客里面的CreateLine 做一下修改如下:
static AcDbObjectId CHAP2CreateLine(void){// Add your code for command CHAP2.CreateLine hereAcGePoint3d ptStart(0,0,0);//创建一个3d空间的点AcGePoint3d ptEnd(100,100,0);AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);//这个类代表了CAD里面的线实体,起始点终结点//获取指向块表的指针AcDbBlockTable *pBlockTable;acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);//acdbHostApplicationServices()->workingDataBase()->getBlockTable(pBlockTable,AcDb::kForRead);AcDbBlockTableRecord *pBlockTableRecord;pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);AcDbObjectId lineld;pBlockTableRecord->appendAcDbEntity(lineld,pLine);//设置颜色// pLine->setColorIndex(1);pBlockTable->close();pBlockTableRecord->close();pLine->close(); return lineld;}
在 这个APP类之外重新添加一段函数代码如下:
Acad::ErrorStatus ChangeColor(AcDbObjectId entId,Adesk::UInt16 colorIndex){AcDbEntity *pEntity;acdbOpenObject(pEntity,entId,AcDb::kForWrite);pEntity->setColorIndex(colorIndex);pEntity->close();return Acad::eOk;}
配置好环境之后,点击运行测试。
结果:
四、ObjectARX 修改对象的属性相关推荐
- JQuery修改对象的属性值
JQuery修改对象的属性值 用到的便是JQuery提供的attr方法,获取属性值的基本结构为:$(obj).attr("属性名"):修改属性值的结构为:$(obj).attr(& ...
- session中存放一个对象,只修改对象的属性,不将修改后的对象存放session,发现session中存放的对象也发生改变!
标题简单描述:先将一个对象放入session,只对对象属性值进行修改,但不将修改后的对象存放session中,发现session中存放的对象属性值也相对应的改变. Person person=new ...
- 前端js修改对象的属性值、添加新的属性、删除对象属性
//源对象 let rtkobj = formRef.current.getFieldsValue(); //要新加的属性let farmname = userInfo.ffarmRespVO.nam ...
- javascript动态修改对象的属性名
在做东钿业务系统的时候,经常碰到写很多重复的ajax对接,于是就想封装一个方法,但是接收data的字段名不一样,所以就需要用到动态对象属性名这个写法了.其实很简单.直接看一下代码吧. 转载于:http ...
- 关于java通过反射 获取/修改 对象属性值的一些注意事项
getFields()与 getDeclaredFields() 前者能够获取所有public字段,包括父类字段: 后者可以所有public/protected/private类型的字段,但是不包括父 ...
- 修改对象的某个属性的值_什么是类,什么是对象
大家好,在我之前的教程中分别讲了"VBA代码解决方案""VBA数据库方案""VBA字典和数组方案",通过对这三套教程的学习,我们对VBA的基 ...
- python 修改模板对象的属性_django小技巧之html模板中调用对象属性或对象的方法...
环境:依赖最初test2数据库 python3版本 多python版本环境 进入,python3虚拟环境,新建项目test4: ]# cd py3/django-test1/ ]# django-ad ...
- JavaScript学习(四十四)—in关键字的使用和for in循环遍历对象的属性
JavaScript学习(四十四)-in关键字的使用和for in循环遍历对象的属性 一.in关键字的使用 作用:判断某个属性是否属于对象 格式:属性名称 in 对象名称 ; 返回值:如果返回的结果为 ...
- js如何修改对象的padding属性
js如何修改对象的padding属性 $(".process_body").css("padding","16px 5px 5px 16px" ...
最新文章
- 远程办公用什么软件比较好?
- mp4box 封装H265码流
- 惠普电脑怎么截屏_省钱上京东双十一买笔记本电脑怎么买更优惠更划算更省钱最新攻略!联想戴尔华硕炫龙荣ROG神州宏碁惠普...
- golang字符串类型及使用细节
- 嵩天python笔记_嵩天Python学习笔记-05
- 计算机excl知识题,2019职称计算机考试Excel模拟题及答案(1.18)
- 论文浅尝 - TACL2020 | TYDI QA:Google 发表一个多语言的问答语料库
- php 类加载其它类,PHP 命名空间 namespace / 类别名 use / 框架自动载入 机理的
- 微课|《Python编程基础与案例集锦(中学版)》第5章例题讲解(1)
- linux内核登录不上,在嵌入式板上启动linux内核后,用root登录不了
- 游戏开发入行大师攻略
- AppScan安装教程
- css给文字设置动态效果,利用纯CSS实现动态的文字效果实例
- 四元数与欧拉角的相互转换
- vscode 的工作台配置文件
- 语音识别/合成开源项目
- 随笔(一)—2018-1-23-ANU暑期学校-无题
- 关于云计算存储虚拟化技术三个层次上的实现
- Android Material Component:工具栏与DisplayCutout
- c语言access码大小写A转换,字母大小写互相转换 ASCII码转化符号问题