天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 72|回复: 0

ObjectARX编程(六) ------块和属性

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
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();

 

 

 

 

ObjectARX编程(六) ------块和属性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:40 , Processed in 0.148403 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表