本节中我们通过创建几何空间点、曲面和采样线了解Civil 3D对象的创建方法。因Civil 3D对象的创建方法相比AutoCAD对象创建要简单的多,比如创建一个几何空间点,最简单的情况采用一行代码(没写错,就是一行)就能实现,类似的操作,您完全可以去Developer’s Guide中查看,因此在本节加入了类的继承及多态的一些知识,这是让程序更加高效、使代码更为简洁的有效方式。我自己在学习Civil 3D二次开发之初,按照Developer’s Guide中的样例去写,结果发现存在大量的重复代码,究其原因,是对类没有很好的理解和应用,所以,即使会给您阅读本节内容造成不小的困难,我也要把您往面向对象程序设计的路上引领。如果您只想采用结构化程序设计,可以只关注我对Civil 3D对象创建方法的分析及帮助文档查询方法的介绍就行了,之后参考Developer’s Guide其他的示例。

上一节中,我们在同一个类CreateEntityDemo中创建了三个方法,分别创建了直线、图层、布局,这一节我们将创建一个名为CivilCreateEntityDemo的基类和三个名称分别为CivilCreateCogoPoint、CivilCreateTinSurface、CivilCreateSampleLine的派生类,在每个类中的采用重写(override)基类方法CivilCreateEntity的方式完成相应的操作。在完成命令方法的时候,通过多态来完成不同的操作。

下面就让我先来创建基类CivilCreateEntityDemo:

在解决方案按中添加类,名称CivilCreateEntityDemo,并添加4个字段、构造函数及方法CivilCreateEntity及GetString(从editor获取字符串)。为了实现派生类能够访问基类的字段,需要采用protected关键字来修饰。为了派生类能够重写基类的方法,方法CivilCreateEntity需要用virtual关键字修饰。在构造函数中初始化各个字段,在GetString方法中添加相应代码。现在你的代码应该类似如下:

01 class CivilCreateEntityDemo

02 {

03     protected Document doc;

04     protected Database db;

05     protected Editor ed;

06     protected CivilDocument civilDoc;

07     public CivilCreateEntityDemo()                                                                    //构造函数

08     {

09             doc = Application.DocumentManager.MdiActiveDocument;

10             ed = doc.Editor;

11             db = doc.Database;

12             civilDoc = CivilApplication.ActiveDocument;

13     }

14     virtual public void CivilCreateEntity()                                             //可重写的虚方法

15     {

16             ed.WriteMessage("\n我什么也没做!");

17     }

18     public void GetString(string mess, ref string stringOut)                     //获取字符串

19     {

20             PromptStringOptions pso = new PromptStringOptions(mess);

21             pso.UseDefaultValue = true;

22             pso.DefaultValue = stringOut;

23             PromptResult pr = ed.GetString(pso);

24             if (pr.Status == PromptStatus.OK)

25             {

26                  stringOut = pr.StringResult;

27             }

28    }

28 }

再次强调如下:注意第3-6行的protected关键字,注意第14行的virtual关键字。第16行中代码是为了测试用的,如果您有兴趣想测试一下调用基类方法或在派生类中没有重写相应方法时,可以向命令行输出相应的信息。

字段应设为私有(用private来修饰)更合适,这里为了简化代码,采用了protected来修饰。如果采用来private修饰,需要增加属性,以便派生类能顺利访问基类的字段。关于属性,您可以查阅C#相关书籍获取更多信息。

一个简单的基类准备完成,下面我们就创建多个派生类来完成创建Civil 3D对象。

Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——的更多相关文章

  1. Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点

    这一小节,我们创建派生于CivilCreateEntityDemo的类CivilCreateCogoPoint,来创建几何空间点. 1 创建类并添加字段及方法 首先在项目资源管理器中向本项目中添加类, ...

  2. Civil 3D 二次开发 创建AutoCAD对象—— 00 ——

    不积跬步无以至千里,不积小流无以成江海.虽然创建一条直线.添加一个图层这样的小程序没有什么实际意义(内部命令很简单就可以完成),但对于初学二次开发的您来说,这可是一大步,这一步跨出去,您就跨进了二次开 ...

  3. Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线

    在方法CreateLine内完成以下代码: 01 public void CreateLine() 02 { 03 PromptPointOptions ppo = new PromptPointOp ...

  4. 学习 Civil 3D二次开发从哪儿开始?

    1.1 从哪儿开始 对于多数的工程设计人员,不完全具备上节所述的各种条件.对于Civil 3D的应用可能比较熟悉:但对于计算机语言,只限于上学时所学的一点基础知识,步入工作岗位后与计算机语言基本无缘: ...

  5. c++ Arx二次开发创建椭圆和样条曲线

    一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2 ...

  6. 4、c++ Arx二次开发创建多段线

    一.本节课程 c++ Arx二次开发创建多段线 二.本节要讲解的知识点 如何应用C++ ARX二次开发创建多段线(AcDbPolyline.AcDb2dPolyLine.AcDb3dPolyline的 ...

  7. 2、Arx二次开发创建第一个应用程序

    一.本节课程 Arx二次开发创建第一个应用程序 二.本节要讲解的知识点 1.手动创建ARX的应用的步骤. 2.应用向导创建ARX应用程序的步骤. 三.具体内容 1.需求:创建一个Hello World ...

  8. Civil 3D 二次开发 事务

    事务,一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 对于初学者来说,从字面上难以理解什么是事务.下面我试着通过讲述事务的作用及特性来帮 ...

  9. NX二次开发-创建(临时)坐标系

    函数:UF_CSYS_create_csys() . UF_CSYS_create_temp_csys() 函数说明:创建坐标系 .创建临时坐标系 用法: #include <uf.h> ...

随机推荐

  1. 海纳百川而来的一篇相当全面的Java NIO教程

    目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...

  2. Javascript 综合示例 网页扫雷游戏

    ---------------认定了的事情,只要是对的,干到底! ------------------------------------------------------------------- ...

  3. 求n!中含有某个因子个数的方法

    链接 [https://www.cnblogs.com/dolphin0520/archive/2011/04/11/2012891.html]

  4. mysql处理重复数据

    有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 你可以在MySQL数据表中设置指定的字段为 PRIMARY ...

  5. 小小知识点(一)——利用电脑自带的BitLocker对磁盘加密

    1.利用电脑自带的BitLocker可以对固定的或移动的磁盘加密 网上有很多的使用方法步骤,可参考百度经验:https://jingyan.baidu.com/article/636f38bb4fac ...

  6. StackWalk64

    #include <Windows.h>   #define  PULONG_PTR ULONG** #define  PULONG ULONG* #define  ULONG_PTR U ...

  7. jmeter的jtl日志转html报告常见报错笔记

    问题:生成的jmeter文件可以放任意位置 输入命令转换hmtl报告 PS D:\user\80003288\桌面\Ques> jmeter -g .\test1.jtl -e -o .\rep ...

  8. vue组件封装选项卡

    <template> <myMenu :arr='arr' :arrcontent='content'></myMenu> </template> &l ...

  9. C#设计模式之5:简单工厂和工厂方法模式

    工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...

  10. [转帖]CS、IP和PC寄存器

    https://www.cnblogs.com/zhuge2018/p/8466288.html 之前的理解不对 当然了 现在的理解也不太对.. CS.IP和PC寄存器 CS寄存器和IP寄存器: 首先 ...