• 创建直线


    ObjectArx中创建直线函数

    AcDbLine(const AcGePoint3d& start, const AcGePoint3d& end)    //起始点与结束点

    如何创建直线

     1 AcDbObjectId CCreateEnt::CreateLine()
     2 {
     3     AcGePoint3d ptStart(0,0,0);     //创建初始点ptStart
     4     AcGePoint3d ptEnd(100,100,0);    //创建结束点ptEnd
     5     AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);    //根据ptStart与ptEnd构建直线
     6 
     7     AcDbBlockTable *pBlockTable;    //声明块表指针pBlockTable
     8     acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);     //以只读获取当前数据库的块表,并赋给pBlockTable
     9 
    10     AcDbBlockTableRecord *pBlockTableRecord;    //声明块表记录指针pBlockTableRecord
    11     pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);    //以写的方式获取当前模型空间
    12 
    13     AcDbObjectId lineId;    //声明直线的ObjectId
    14     pBlockTableRecord->appendAcDbEntity(lineId,pLine);    //添加该直线到模型空间
    15 
    16     pBlockTable->close();   //关闭块表
    17     pBlockTableRecord->close();    //关闭模型空间块记录
    18     pLine->close();   //关闭直线
    19 
    20     return lineId;
    21 
    22 }

    步骤:

    (1) 创建直线。

    (2) 只读方式获取当前数据库的块表。

    (3) 根据块表,以写方式获取代表模型空间的块记录。

    (4) 添加直线到到块记录。

    (5) 关闭块表,关闭块记录,关闭直线

    说明:

    (1) getBlockTable,getAt,AppendDbEntity函数返回操作的结果,如果成功会返回Acad::eOk。

    (2) 打开方式有3种,AcDb::kForRead以读方式打开,AcDb::kForWrite以写的方式打开,AcDb::kForNotify以通知的方式打开。

    (3) 宏ACDB_MODEL_SPACE代表模型空间,ACDB_PAPER_SPACE代表图纸空间。

    (4) 操作完毕后,需要关闭对象,不要使用delete。

  • 相关阅读:
    数据结构与算法(C++)之swap交换
    常用shell脚本
    Java知识库
    jenkins:你们是怎么在控制台实时打印服务启动日志的?
    mqtt压力测试工具emqtt
    postman中获取环境变量和全局变量
    不想当将军的士兵不是好士兵吗?
    永久关闭火狐浏览器自动更新的方法
    性能测试案例:线程池拒绝策略使用不当导致并发一上去就会出现大量报错
    性能测试案例:一个频繁fgc问题
  • 原文地址:https://www.cnblogs.com/estival/p/3106510.html
Copyright © 2020-2023  润新知