天气与日历 切换到窄版

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

[每日一码] ARX插入块的实现代码

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-3-14 20:09:01 | 显示全部楼层 |阅读模式
    1. ////添加块到块表中================  
    2. static void TESTaddblkcmd(){  
    3.         AcDbBlockTable* pBlkTbl;  
    4.         acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);  
    5.         ////创建新块  
    6.         AcDbBlockTableRecord* pBlkTblRcd;  
    7.         pBlkTblRcd = new AcDbBlockTableRecord();  
    8.         ////根据用户的输入设置块表记录的名称  
    9.         TCHAR blkName[256];  
    10.         if(acedGetString(Adesk::kFalse,采用T("\n输入块名称"),blkName) != RTNORM){  
    11.                 pBlkTbl->close();  
    12.                 delete pBlkTblRcd;  
    13.                 return;  
    14.         }  
    15.         pBlkTblRcd->setName(blkName);  
    16.         ////将块表记录添加到块表中  
    17.         AcDbObjectId blkDefId;  
    18.         pBlkTbl->add(blkDefId,pBlkTblRcd);  
    19.         pBlkTbl->close();  
    20.         ////向块表记录中添加实体  
    21.         AcGePoint3d ptStart(-10,0,0),ptEnd(10,0,0);  
    22.         AcDbLine* pLine1 = new AcDbLine(ptStart,ptEnd);  
    23.         ptStart.set(0,-10,0);  
    24.         ptEnd.set(0,10,0);  
    25.         AcDbLine *pLine2 = new AcDbLine(ptStart,ptEnd);  
    26.         AcGeVector3d vecNormal(0,0,1);  
    27.         AcDbCircle *pCircle = new AcDbCircle(AcGePoint3d::kOrigin,vecNormal,6);  
    28.         AcDbObjectId entId;  
    29.         pBlkTblRcd->appendAcDbEntity(entId,pLine1);  
    30.         pBlkTblRcd->appendAcDbEntity(entId,pLine2);  
    31.         pBlkTblRcd->appendAcDbEntity(entId,pCircle);  
    32.         ////关闭实体块表记录  
    33.         pLine1->close();  
    34.         pLine2->close();  
    35.         pCircle->close();  
    36.         pBlkTblRcd->close();  
    37. }  
    38. ////插入块参照  
    39. static void TESTaddblkrefcmd(){  
    40.         ////获得用户输入的块定义名称  
    41.         CString strBlkDef;  
    42.         if(acedGetString(Adesk::kFalse,采用T("\n输入块名称\n"),strBlkDef.GetBuffer()) != RTNORM){  
    43.                 return;  
    44.         }  
    45.         acutPrintf(strBlkDef);  
    46.         ////获得当前数据库的块表  
    47.         AcDbBlockTable* pBlkTbl;  
    48.         acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);  
    49.         ////查找用户指定的块定义是否存在  
    50.         if(!pBlkTbl->has(strBlkDef)){  
    51.                 acutPrintf(采用T("\n当前图形中未包含块定义"));  
    52.                 pBlkTbl->close();  
    53.                 return;  
    54.         }  
    55.         ////获得用户输入的块参照的插入点  
    56.         ads采用point pt;  
    57.         if(acedGetPoint(NULL,采用T("\n输入块参照的插入点"),pt) != RTNORM){  
    58.                 pBlkTbl->close();  
    59.                 return;  
    60.         }  
    61.         AcGePoint3d ptInsert = asPnt3d(pt);  
    62.         ////获得用户制定的块表记录  
    63.         AcDbObjectId blkDefId;  
    64.         pBlkTbl->getAt(strBlkDef,blkDefId);  
    65.         ////创建块参照对象  
    66.         AcDbBlockReference* pBlkRef = new AcDbBlockReference(ptInsert,blkDefId);  
    67.         ////将块参照添加到模型空间  
    68.         AcDbBlockTableRecord* pBlkTblRcd;  
    69.         pBlkTbl->getAt(ACDB采用MODEL采用SPACE,pBlkTblRcd,AcDb::kForWrite);  
    70.         AcDbObjectId entId;  
    71.         pBlkTblRcd->appendAcDbEntity(entId,pBlkRef);  
    72.         ////关闭数据库对象  
    73.         pBlkTbl->close();  
    74.         pBlkTblRcd->close();  
    75.         pBlkTbl->close();  
    76. }  
    77. ////===================================================插入带有属性的块定义  
    78. static void TESTaddblk2cmd(){  
    79.         ////获得当前图形的数据库块表  
    80.         AcDbBlockTable* pBlkTbl;  
    81.         acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);  
    82.         ////创建新的块表记录  
    83.         AcDbBlockTableRecord* pBlkTblRcd;  
    84.         pBlkTblRcd = new AcDbBlockTableRecord();  
    85.         ////根据用户的输入设置块表记录的名称  
    86.         CString blkName;  
    87.         if(acedGetString(Adesk::kFalse,采用T("\n输入块表记录名称:"),blkName.GetBuffer()) != RTNORM){  
    88.                 pBlkTbl->close();  
    89.                 delete pBlkTblRcd;  
    90.                 return;  
    91.         }  
    92.         pBlkTblRcd->setName(blkName);  
    93.         ////将块表记录添加到块表中  
    94.         AcDbObjectId blkDefId;  
    95.         pBlkTbl->add(blkDefId,pBlkTblRcd);  
    96.         pBlkTbl->close();  
    97.         ////向块表记录添加实体  
    98.         AcGePoint3d ptStart(-10,0,0);  
    99.         AcGePoint3d ptEnd(10,0,0);  
    100.         AcDbLine* pLine1 = new AcDbLine(ptStart,ptEnd);  
    101.         ptStart.set(0,-10,0);  
    102.         ptEnd.set(0,10,0);  
    103.         AcDbLine* pLine2 = new AcDbLine(ptStart,ptEnd);  
    104.         AcGeVector3d vecNormal(0,0,1);  
    105.         AcDbCircle* pCircle = new AcDbCircle(AcGePoint3d::kOrigin,vecNormal,6);  
    106.         ////创建一个属性,输入直径  
    107.         AcDbAttributeDefinition* pAttDef = new AcDbAttributeDefinition(ptEnd,采用T("20"),采用T("直径"),采用T("输入直径"));  
    108.         AcDbObjectId entId;  
    109.         pBlkTblRcd->appendAcDbEntity(entId,pLine1);  
    110.         pBlkTblRcd->appendAcDbEntity(entId,pLine2);  
    111.         pBlkTblRcd->appendAcDbEntity(entId,pCircle);  
    112.         pBlkTblRcd->appendAcDbEntity(entId,pAttDef);  
    113.         ////关闭实体和块表记录  
    114.         pLine1->close();  
    115.         pLine2->close();  
    116.         pCircle->close();  
    117.         pAttDef->close();  
    118.         pBlkTblRcd->close();  
    119. }
    复制代码

     

     

     

     

    [每日一码] ARX插入块的实现代码
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-11-1 13:25 , Processed in 0.177743 second(s), 29 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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