天气与日历 切换到窄版

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

ObjectARX2015 + vs2012创建块定义

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
[code]所有的实体都保存在块表记录中,而块表记录则存储在块表中。实际上,用户在
AutoCAD 中定义块相当于增加了一个块表记录,块表记录的名称就是块定义的名称。
        创建块定义的一般步骤(仿照在图形数据库中创建实体的步骤)
                (1)获得当前图形数据库的块表,向其中添加一条新的块表记录。
                (2)创建组成块定义的实体,将其添加到新的块表记录中。
                (3)关闭块表、块表记录和新创建的实体。
3. 步骤

(1)用户输入块定义的名称,使用 acedGetString 函数来获得用户输入的字符串,

                acedGetString 函数函数定义为:

//acedGetString 函数函数定义为
//使用 acedGetString 函数来获得用户输入的字符串
int acedGetString(
        int cronly,            //cronly 指定用户输入的字符串中是否可以包含空格,可以输入 Adesk::kTrue 或者 Adesk::kFalse
        const char * prompt,   //prompt 指定了在命令行提示用户输入的文本
        char * result);            //result 则保存了用户输入的结果
(2)在CCreateEnt中添加函数AddBlk()

    //添加块
    static void AddBlk(); //添加块
//添加块
void CCreateEnt::AddBlk()
{
    // 获得当前图形数据库的块表
    AcDbBlockTable *pBlkTbl;
    acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForWrite);
    // 创建新的块表记录
    AcDbBlockTableRecord *pBlkTblRcd;
    pBlkTblRcd = new AcDbBlockTableRecord();
    // 根据用户的输入设置块表记录的名称
    TCHAR blkName[40];
    if (acedGetString(Adesk::kFalse, _T("\n输入图块的名称:"), blkName) != RTNORM)
    {
        pBlkTbl->close();
        delete pBlkTblRcd;
        return;
    }
    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); // 创建一条直线
    AcGeVector3d vecNormal(0, 0, 1);
    AcDbCircle *pCircle = new AcDbCircle(AcGePoint3d::kOrigin, vecNormal, 6);
    AcDbObjectId entId;
    pBlkTblRcd->appendAcDbEntity(entId, pLine1);
    pBlkTblRcd->appendAcDbEntity(entId, pLine2);
    pBlkTblRcd->appendAcDbEntity(entId, pCircle);

    // 关闭实体和块表记录
    pLine1->close();
    pLine2->close();
    pCircle->close();
    pBlkTblRcd->close();
}

(3)在acrxEntryPoint.cpp中

ACED_ARXCOMMAND_ENTRY_AUTO(CArxConfigApp, MidasMyGroup, MyAddBlk, MyAddBlk, ACRX_CMD_MODAL, NULL) //创建块
    //当前项目中注册一个命令 AddBlk
    static void MidasMyGroupMyAddBlk()
    {
        //添加长方体
        CCreateEnt::AddBlk();
    }
效果展示:
————————————————
版权声明:本文为CSDN博主「qq_42981953」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42981953/article/details/121889382[/code]

 

 

 

 

ObjectARX2015 + vs2012创建块定义
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 11:32 , Processed in 0.153569 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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