天气与日历 切换到窄版

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

直线创建

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

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    1、初始化
    // 在内存上创建一个新的AcDbLine对象
    AcGePoint3d ptStart(0, 0, 0);
    AcGePoint3d ptEnd(100, 100, 0);
    AcDbLine *pLine = new AcDbLine(ptStart, ptEnd);

    注意,基于 AutoCAD 内部的实现机制,必须在堆上创建对象,而不能用下面的语句创 建直线的对象: AcDbLine line(ptStart, ptEnd);
    2、建块表
    // 获得指向块表的指针
    AcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()     
                       ->getBlockTable(pBlockTable, AcDb::kForRead);

    acdbHostApplicationServices()->workingDatabase()能够获得一个指向当前活动的图形数 据库的指针;
    getBlockTable 是 AcDbDatabase 类的一个成员函数, 用于获得指向图形数据库的块表的指针;
    创建直线的时候不需 要更改块表,因此这里打开的模式为 AcDb::kForRead(AcDb::kForRead、AcDb::kForWrite 和 AcDb::kForNotify );
    3、添加块表记录
    // 获得指向特定的块表记录(模型空间)的指针
    AcDbBlockTableRecord *pBlockTableRecord;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,      
                                      AcDb::kForWrite);

    getAt 函数是 AcDbBlockTable 类的一个成员函数,用于获得块表中特定的记录,其定义 为:
    Acad::ErrorStatus getAt(
                                          const char* entryName,
                                          AcDbBlockTableRecord*& pRec,
                                          AcDb::OpenMode openMode,
                                          bool openErasedRec = false) const;
    第一个参数用于指定块表记录的名称,ACDB_MODEL_SPACE 是 ObjectARX 中定义的 一个常量,其内容是“*Model_Space”;第二个参数用于返回指向块表记录的指针;第三个参 数指定了块表记录打开的模式,下一步要向块表记录中添加实体,所以就用写的模式 (AcDb::kForWrite)打开;第四个参数指定是否查找已经被删除的记录;
    4、向块表记录中添加实体
    // 将AcDbLine类的对象添加到块表记录中
    AcDbObjectId lineId;
    pBlockTableRecord->appendAcDbEntity(lineId, pLine);

    appendAcDbEntity 是 AcDbBlockTableRecord 类的成员函数,用于将 pEntity 指向的实体 添加到块表记录和图形数据库中,其定义为:
    Acad::ErrorStatus appendAcDbEntity(
                                                               AcDbObjectId& pOutputId,
                                                                AcDbEntity* pEntity);
    第一个参数返回图形数据库为添加的实体分配的 ID 号;第二个参数指定了所要添加的 实体。
    5、关闭图形数据库
    // 关闭图形数据库的各种对象
    pBlockTable->close();
    pBlockTableRecord->close();
    pLine->close();
    6、完整代码
    void ZffCHAP2CreateLine() {  // 在内存上创建一个新的AcDbLine对象
    AcGePoint3d ptStart(0, 0, 0);
    AcGePoint3d ptEnd(100, 100, 0);
    AcDbLine *pLine = new AcDbLine(ptStart, ptEnd);    // 获得指向块表的指针
    AcDbBlockTable *pBlockTable;
    acdbHostApplicationServices()->workingDatabase()  ->getBlockTable(pBlockTable, AcDb::kForRead);

    // 获得指向特定的块表记录(模型空间)的指针
    AcDbBlockTableRecord *pBlockTableRecord;   
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,        AcDb::kForWrite);       // 将AcDbLine类的对象添加到块表记录中
    AcDbObjectId lineId;   
    pBlockTableRecord->appendAcDbEntity(lineId, pLine);   

    pLine->setColorIndex(1); //颜色设为红色,创建对象时修改颜色;

    // 关闭图形数据库的各种对象
    pBlockTable->close();   
    pBlockTableRecord->close();   
    pLine->close();  }

    引用自:ObjectARX开发实例教程

    一、准备工作:
    1、VC++目录设置:工具-选项-VC++目录,添加包含文件和库文件
    2、设置输出文件:将输出文件的扩展名有dll改为arx;

    3、属性-常规配置:
    4、属性-链接器-输入:
    rxapi.lib
    acdb18.lib
    acge18.lib
    acgiapi.lib
    acISMobj18.lib
    acad.lib
    acedapi.lib
    adui18.lib
    acui18.lib

     

     

     

     

    直线创建
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-7-1 05:44 , Processed in 0.055859 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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