天气与日历 切换到窄版

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

块和属性

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-5-4 11:19:39 | 显示全部楼层 |阅读模式
  1. 1. 块的新增
  2. cstring blkname;
  3. //获取当前图形数据库
  4. AcDbBlockTable* pBlkTbl = NULL;
  5. acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
  6. //创建新的块表记录
  7. AcDbBlockTableRecord *pBlkTblRcd = new AcDbBlockTableRecord();
  8. //根据块名称,添加到块表中
  9. pBlkTblRcd->setName(blkname);
  10. AcDbObjectId blkDefId;
  11. pBlkTbl->add(blkDefId,pBlkTblRcd );
  12. pBlkTbl->close();
  13. //项块表记录中添加实体
  14. AcGePoint3d ptStart(-10,0,0),ptEnd(10,0,0);
  15. AcDbLine *pLine1 = new AcDbLine(ptStart,ptEnd);
  16. ptStart.set(0,-10,0);
  17. ptEnd.set(0,10,0);
  18. AcDbLine *pLine2 = new AcDbLine(ptStart,ptEnd);
  19. AcDbObjectId entId;
  20. pBlkTblRcd->appendAcDbEntity(entId,pLine1);
  21. pBlkTblRcd->appendAcDbEntity(entId,pLine2);
  22. //关闭
  23. pLine1->close();
  24. pLine2->close();
  25. pBlkTblRcd->close();
  26.   2. 快参照
  27.   块定义和块参照(AcDbBlockReferende) 是两个概念,块定义不一定是一个实体,而是一种对实体的描述,通过定义块获得块参照则是一种实体,图形中显示的“块”都是快参照,通过插入块获得。
  28.   在ObjectARX中块定义通过块表记录来保存,而块参照由AcDbBlockReference来来表示。既然快参照是一个实体,那么创建块参照的过程与创建一条直线似乎不应该有什么区别?事实的确如此。
  29. cstring blkname;
  30. //获取当前图形数据库
  31. AcDbBlockTable* pBlkTbl = NULL;
  32. acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
  33. //查询块是否已存在
  34. if(pBlkTbl->has(blkname))
  35. return ;
  36. //获取块的插入点
  37. AcGePoint3d ptInsert(0,0,0);
  38. //获取块表记录
  39. AcDbObjectId blkDefId;
  40. pBlkTbl->getAt(blkname,blkDefId);
  41. pBlkTbl->close();
  42. //创建快参照
  43. AcDbBlockReference *pBlkRef = new AcDbBlockReference(ptInsert,blkDefId);
  44. //将块参照添加到模型空间
  45. CDwgDatabaseUtil::PostToModelSpece(pBlkRef );
  46. pBlkRef->close();
  47.   3. 创建带有属性的块定义
  48. cstring blkname;
  49. //获取当前图形数据库
  50. AcDbBlockTable* pBlkTbl = NULL;
  51. acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
  52. //创建新的块表记录
  53. AcDbBlockTableRecord *pBlkTblRcd = new AcDbBlockTableRecord();
  54. //根据块名称,添加到块表中
  55. pBlkTblRcd->setName(blkname);
  56. AcDbObjectId blkDefId;
  57. pBlkTbl->add(blkDefId,pBlkTblRcd );
  58. pBlkTbl->close();
  59. //项块表记录中添加实体
  60. AcGePoint3d ptStart(-10,0,0),ptEnd(10,0,0);
  61. AcDbLine *pLine1 = new AcDbLine(ptStart,ptEnd);
  62. ptStart.set(0,-10,0);
  63. ptEnd.set(0,10,0);
  64. AcDbLine *pLine2 = new AcDbLine(ptStart,ptEnd);
  65. //创建一个属性
  66. AcDbAttributeDefinition *pAtterDef = new AcDbAttributeDefinition(ptEnd,TEXT("20"),TEXT("直径"),TEXT("输入直径"));
  67. AcDbObjectId entId;
  68. pBlkTblRcd->appendAcDbEntity(entId,pLine1);
  69. pBlkTblRcd->appendAcDbEntity(entId,pLine2);
  70. pBlkTblRcd->appendAcDbEntity(entId,pAtterDef );
  71. //关闭
  72. pLine1->close();
  73. pLine2->close();
  74. pBlkTblRcd->close();
复制代码

 

 

 

 

块和属性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-5 12:29 , Processed in 0.146919 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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