ObjectARX编程(六) ------块和属性
来源:互联网 发布:股票盈亏记录软件 编辑:程序博客网 时间:2024/06/06 09:54
1. 块的新增
cstring blkname;
//获取当前图形数据库
AcDbBlockTable* pBlkTbl = NULL;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//创建新的块表记录
AcDbBlockTableRecord *pBlkTblRcd = new AcDbBlockTableRecord();
//根据块名称,添加到块表中
pBlkTblRcd->setName(blkname);
AcDbObjectId blkDefId;
pBlkTbl->add(blkDefId,pBlkTblRcd );
pBlkTbl->close();
//项块表记录中添加实体
AcGePoint3d ptStart(-10,0,0),ptEnd(10,0,0);
AcDbLine *pLine1 = new AcDbLine(ptStart,ptEnd);
ptStart.set(0,-10,0);
ptEnd.set(0,10,0);
AcDbLine *pLine2 = new AcDbLine(ptStart,ptEnd);
AcDbObjectId entId;
pBlkTblRcd->appendAcDbEntity(entId,pLine1);
pBlkTblRcd->appendAcDbEntity(entId,pLine2);
//关闭
pLine1->close();
pLine2->close();
pBlkTblRcd->close();
2. 快参照
块定义和块参照(AcDbBlockReferende) 是两个概念,块定义不一定是一个实体,而是一种对实体的描述,通过定义块获得块参照则是一种实体,图形中显示的“块”都是快参照,通过插入块获得。
在ObjectARX中块定义通过块表记录来保存,而块参照由AcDbBlockReference来来表示。既然快参照是一个实体,那么创建块参照的过程与创建一条直线似乎不应该有什么区别?事实的确如此。
cstring blkname;
//获取当前图形数据库
AcDbBlockTable* pBlkTbl = NULL;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//查询块是否已存在
if(pBlkTbl->has(blkname))
return ;
//获取块的插入点
AcGePoint3d ptInsert(0,0,0);
//获取块表记录
AcDbObjectId blkDefId;
pBlkTbl->getAt(blkname,blkDefId);
pBlkTbl->close();
//创建快参照
AcDbBlockReference *pBlkRef = new AcDbBlockReference(ptInsert,blkDefId);
//将块参照添加到模型空间
CDwgDatabaseUtil::PostToModelSpece(pBlkRef );
pBlkRef->close();
3. 创建带有属性的块定义
cstring blkname;
//获取当前图形数据库
AcDbBlockTable* pBlkTbl = NULL;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//创建新的块表记录
AcDbBlockTableRecord *pBlkTblRcd = new AcDbBlockTableRecord();
//根据块名称,添加到块表中
pBlkTblRcd->setName(blkname);
AcDbObjectId blkDefId;
pBlkTbl->add(blkDefId,pBlkTblRcd );
pBlkTbl->close();
//项块表记录中添加实体
AcGePoint3d ptStart(-10,0,0),ptEnd(10,0,0);
AcDbLine *pLine1 = new AcDbLine(ptStart,ptEnd);
ptStart.set(0,-10,0);
ptEnd.set(0,10,0);
AcDbLine *pLine2 = new AcDbLine(ptStart,ptEnd);
//创建一个属性
AcDbAttributeDefinition *pAtterDef = new AcDbAttributeDefinition(ptEnd,TEXT("20"),TEXT("直径"),TEXT("输入直径"));
AcDbObjectId entId;
pBlkTblRcd->appendAcDbEntity(entId,pLine1);
pBlkTblRcd->appendAcDbEntity(entId,pLine2);
pBlkTblRcd->appendAcDbEntity(entId,pAtterDef );
//关闭
pLine1->close();
pLine2->close();
pBlkTblRcd->close();
阅读全文
0 0
- ObjectARX编程(六) ------块和属性
- 图块引用、属性块引用、创建新层表、ObjectArx开发中静态变量和全局变量要点
- ObjectARX编程(三) --------数据库的介绍
- ObjectARX编程(四) --------符号表简述
- (六)java并发编程--synchronized同步块
- ObjectARX编程(八) --------有名对象字典、用户字典和字典中的对象
- 在ObjectARX中添加“块”
- VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)
- VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)
- ObjectARX和.Net混合编程在AutoCAD二次开发中的应用
- ObjectARX编程环境
- ObjectARX编程环境概述
- diy数据库(六)--信号和内核控制块
- Maven实战(六)--子模块的聚合和继承
- (六)静态域,静态方法和静态代码块
- Maven实战(六)--子模块的聚合和继承
- ObjectARX文档设置和ObjectARX标准程序
- ObjectARX编程(五) ---------符号表中层表的操作
- python3实战scrapy生成csv文件
- 如何在vs2013中搭建python环境
- HTML 表单用于搜集不同类型的用户输入
- 类的构造函数初探
- ORACLE多表关联UPDATE 语句
- ObjectARX编程(六) ------块和属性
- 第二十一天H5进阶
- 解读Batch Normalization
- 面试题18树的子结构
- 验证数字为非负数,并强制保留两位小数。(不进行四舍五入)
- k-近邻算法
- Linux_ActiveMQ 安装笔记
- POJ 1341 The Strongest Subchains 笔记
- PHP Web开发技巧