zoukankan      html  css  js  c++  java
  • 2.1创建直线

        新建项目CreateLine。步骤和1.4HelloWorld创建相同。注册一个命令,命令名自己定义,我就跟张帆老师的一样取作CreateLine。

        其中,Mode有两种选项,虽然我现在也不知道这两种有什么不同,可是先照着张帆老师的做吧。如有人知道,希望可以告诉我,先谢过。新建好命令之后同样得到一个定义好的函数static void XBCreateLine(void);在其中添加画直线的代码。

     1 #include "StdAfx.h"
     2 #include "resource.h"
     3 
     4 //-----------------------------------------------------------------------------
     5 #define szRDS _RXST("XB")
     6 
     7 //-----------------------------------------------------------------------------
     8 //----- ObjectARX EntryPoint
     9 class CMy21CreateLineApp : public AcRxArxApp {
    10 
    11 public:
    12     CMy21CreateLineApp () : AcRxArxApp () {}
    13 
    14     virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
    15         // TODO: Load dependencies here
    16 
    17         // You *must* call On_kInitAppMsg here
    18         AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
    19         
    20         // TODO: Add your initialization code here
    21 
    22         return (retCode) ;
    23     }
    24 
    25     virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
    26         // TODO: Add your code here
    27 
    28         // You *must* call On_kUnloadAppMsg here
    29         AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
    30 
    31         // TODO: Unload dependencies here
    32 
    33         return (retCode) ;
    34     }
    35 
    36     virtual void RegisterServerComponents () {
    37     }
    38 
    39 
    40     // - XB.CreateLine command (do not rename)
    41     // 画直线命令,画一条起点为(0,0,0)终点为(100,100,0)的直线
    42     static void XBCreateLine(void)
    43     {
    44         // Add your code for command XB.CreateLine here
    45 
    46         //第一步,在内存上创建一个新的AcDbLine对象
    47         AcGePoint3d ptStart(0,0,0);    //起点
    48         AcGePoint3d ptEnd(100,100,0);  //终点
    49         AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);
    50 
    51         //第二步,获得指向表块的指针
    52         AcDbBlockTable *pBlockTable;
    53         acdbHostApplicationServices()->workingDatabase()
    54             ->getBlockTable(pBlockTable,AcDb::kForRead);
    55 
    56         //第三步,获得指向特定的块表记录(模型空间)的指针
    57         AcDbBlockTableRecord *pBlockTableRecord;
    58         pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,
    59             AcDb::kForWrite);
    60 
    61         //第四步,将AcDbLine对象添加到块表记录中
    62         AcDbObjectId lineId;
    63         pBlockTableRecord->appendAcDbEntity(lineId,pLine);
    64 
    65         //第五步,关闭数据库的各种对象
    66         pBlockTable->close();
    67         pBlockTableRecord->close();
    68         pLine->close();
    69 
    70     }
    71 } ;
    72 
    73 //-----------------------------------------------------------------------------
    74 IMPLEMENT_ARX_ENTRYPOINT(CMy21CreateLineApp)
    75 
    76 ACED_ARXCOMMAND_ENTRY_AUTO(CMy21CreateLineApp, XB, CreateLine, CreateLine, ACRX_CMD_MODAL, NULL)

         还需在StdAfx.cpp中包含AcDbLine类的头文件dbents.h,否则AcDbLine类对象就无法识别。

        最后设置好CAD的exe路径(操作方法,同1.4HelloWorld中的设置),然后编译运行,加载命令,在命令行输入命令之后显示直线。完工!

        对张帆老师这一节讲解内容的一些个人总结:

    1.理解数据库的几个基础名词:

      表:表是数据库的组成单位,一个数据库至少包含一个表。

      记录:记录是表的组成单位,一个表可能包含多条记录,也可能不包含任何记录。

    2.创建一个图形对象时候需要遵循的基础步骤

      (1)确定要创建对象的图形数据库;
      (2)获得图形数据库的块表;
      (3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记录中。

      (4)创建实体类的一个对象,将该对象附加到特定的块表记录中。

    3、关于为什么是AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);而不是AcDbLine line(ptStart,ptEnd);?

    答:因为,基于AutoCAD内部实现机制(什么机制我也不清楚),必须在堆上创建对象(即用new)。

    4、为什么创建完对象却不显示?

    答:因为创建的对象仅在内存中创建,如果想要显示出来还必须将其添加到数据库中。

  • 相关阅读:
    elasticsearch安装与使用(5)-- search guard安装与配置
    elasticsearch安装与使用(4)-- 安装中文分词插件elasticsearch 的 jdbc
    elasticsearch安装与使用(3)-- 安装中文分词插件elasticsearch-analyzer-ik
    elasticsearch安装与使用(2)-- centos7 安装测试的集群工具elasticsearch head
    ES6 学习笔记 (1)
    elasticsearch安装与使用(1)-- centos7 elasticsearch的两种简单安装方法
    Sphinx 安装与使用(2)-- 配置Coreseek
    Sphinx 安装与使用(1)-- 安装Coreseek
    web_html-day1
    Python之路,Day13
  • 原文地址:https://www.cnblogs.com/xueniwawa/p/3958277.html
Copyright © 2011-2022 走看看