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、为什么创建完对象却不显示?

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

时间: 2024-09-30 23:52:19

2.1创建直线的相关文章

ObjectARX2010 学习笔记001:在新数据库中创建直线并将此数据库保存成DWG文件

static void swtArxProject5createLine(void) { // Add your code for command swtArxProject5.createLine here //创建新的CAD数据库 AcDbDatabase *pDb=new AcDbDatabase(); //定义块表指针 AcDbBlockTable *pBlkTbl; //获取块表 pDb->getSymbolTable(pBlkTbl,AcDb::kForRead); //定义块表记录

3、ObjectARX开发创建直线、圆、圆弧和修改对象属性

一.本节课程 Arx二次开发创建直线.圆.圆弧和修改对象属性 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建直线. 2.如何应用C++ ARX二次开发创建圆. 3.如何应用C++ ARX二次开发创建圆弧. 4.如何修改对象的属性. 5.腾讯课堂云幽学院详细的内容讲解. 三.具体内容 1.创建一条直线,直线的起点是(0,0,0),直线的终点(100,100,0). 2.表:表是数据库的组成单位,一个数据库至少含有一个表. 3.记录:记录是表的组成单位,一个表可能含有多个记录,也可能

FreeCAD二次开发-Part.LineSegment创建直线

from FreeCAD import Base # 点坐标 V1 = Base.Vector(0,10,0) V2 = Base.Vector(30,10,0) V3 = Base.Vector(30,-10,0) V4 = Base.Vector(0,-10,0) VC1 = Base.Vector(-10,0,0) VC2 = Base.Vector(40,0,0) # 创建圆弧 C1 = Part.Arc(V1,VC1,V4) C2 = Part.Arc(V2,VC2,V3) # 创建直

.NET AutoCAD二次开发之路(一、直线篇)

我以前只有一点VB的基础,C语言也只是看过,学这个CAD二次开发,也是借工作之余研究下,我到现在已经从事机械行业5年了,中国的工业设计环境区别太大,各行各业的技术现状也不尽相同,但有一点是可以肯定的,那就是自动化,国外都在工业4.0了,我们还在互联网+,哎太out了,我也赶紧进修下,要不就淘汰了.所以我选择了CAD二次开发,主要还是跟专业接近,希望能越学越精吧,未来就让未来的我去面对! 今天主要总结下直线的创建,要想能在CAD中生成直线或者其他图形,都必须遵循几个步骤,那就是: 1.获取当前图形

计算机图形学 绘制任意斜率的直线(1)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40025917 本文演示,通过自己编写绘制直线函数(像素点填充),绘制任意斜率的直线. 1)创建CP2类 头文件:p2.h // P2.h: interface for the CP2 class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX

计算机图形学 彩色直线段的反走样(5)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40083207 本文通过一个完整的例子来演示彩色直线段的反走样. 1)创建CP2类 头文件:P2.h // P2.h: interface for the CP2 class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_P2_H__DD23

计算机图形学 直线反走样Wu算法(4)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40048285 本文通过一个完整的实例来演示,直线反走样Wu算法. 1)创建CP2类 头文件:P2.h // P2.h: interface for the CP2 class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_P2_H__DD2

CAD编辑器中怎么绘制直线

在日常的工作中,都是需要CAD绘图的,但是在刚刚了解CAD的小伙伴们来说绘制复杂的CAD图纸是有一定的困难的,先要从很简单的开始,那在CAD编辑器中怎么绘制直线?大家可不要觉得很简单哈,这也是有一定的难度的.那下面我们就一起来看看具体绘制的操作过程吧,不会操作的小伙伴们可以来看看,希望能够帮助到你们. 第一步:首先,将电脑进行打开,如果电脑中没有安装CAD编辑器.那就在电脑桌面上任意打开一个浏览器,在搜索框中搜索迅捷CAD编辑器,接着点击进入官网,点击下载安装最新版本的CAD编辑器. 第二步:接

FreeCAD二次开发-Part.Face创建面

from FreeCAD import Base # 点坐标 V1 = Base.Vector(0,10,0) V2 = Base.Vector(30,10,0) V3 = Base.Vector(30,-10,0) V4 = Base.Vector(0,-10,0) VC1 = Base.Vector(-10,0,0) VC2 = Base.Vector(40,0,0) # 创建圆弧 C1 = Part.Arc(V1,VC1,V4) C2 = Part.Arc(V2,VC2,V3) # 创建直