本节中我们通过创建几何空间点、曲面和采样线了解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 ——的更多相关文章
-
Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
这一小节,我们创建派生于CivilCreateEntityDemo的类CivilCreateCogoPoint,来创建几何空间点. 1 创建类并添加字段及方法 首先在项目资源管理器中向本项目中添加类, ...
-
Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
不积跬步无以至千里,不积小流无以成江海.虽然创建一条直线.添加一个图层这样的小程序没有什么实际意义(内部命令很简单就可以完成),但对于初学二次开发的您来说,这可是一大步,这一步跨出去,您就跨进了二次开 ...
-
Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
在方法CreateLine内完成以下代码: 01 public void CreateLine() 02 { 03 PromptPointOptions ppo = new PromptPointOp ...
-
学习 Civil 3D二次开发从哪儿开始?
1.1 从哪儿开始 对于多数的工程设计人员,不完全具备上节所述的各种条件.对于Civil 3D的应用可能比较熟悉:但对于计算机语言,只限于上学时所学的一点基础知识,步入工作岗位后与计算机语言基本无缘: ...
-
c++ Arx二次开发创建椭圆和样条曲线
一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2 ...
-
4、c++ Arx二次开发创建多段线
一.本节课程 c++ Arx二次开发创建多段线 二.本节要讲解的知识点 如何应用C++ ARX二次开发创建多段线(AcDbPolyline.AcDb2dPolyLine.AcDb3dPolyline的 ...
-
2、Arx二次开发创建第一个应用程序
一.本节课程 Arx二次开发创建第一个应用程序 二.本节要讲解的知识点 1.手动创建ARX的应用的步骤. 2.应用向导创建ARX应用程序的步骤. 三.具体内容 1.需求:创建一个Hello World ...
-
Civil 3D 二次开发 事务
事务,一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 对于初学者来说,从字面上难以理解什么是事务.下面我试着通过讲述事务的作用及特性来帮 ...
-
NX二次开发-创建(临时)坐标系
函数:UF_CSYS_create_csys() . UF_CSYS_create_temp_csys() 函数说明:创建坐标系 .创建临时坐标系 用法: #include <uf.h> ...
随机推荐
-
[转载]彻底弄清struct和typedef struct
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
-
Python 2.7 学习笔记 列表的使用
同其它编程语言一样,python也提供了丰富的数据结构,以方便数据的处理.本文介绍两种最基本的数据集合,列表和元组的使用. 一.列表使用介绍 可以理解为一个有序的序列.其使用方式举例如下: list= ...
-
Yii Framework2.0开发教程(4)在yii中定义全局变量
在yii中定义全局变量最好的地方是入口脚本处.也就是web目录中的index.php文件 比如我们在defined('YII_ENV') or define('YII_ENV', 'dev');后写上 ...
-
ORA-02266: 表中的唯一/主键被启用的外键引用
http://www.cnblogs.com/cici-new/archive/2013/01/01/2841700.html 需要如下操作 先取消子表外键的外键约束,之后删除父表数据,最后再次启用外 ...
-
Java中的双重检查锁(double checked locking)
最初的代码 在最近的项目中,写出了这样的一段代码 private static SomeClass instance; public SomeClass getInstance() { if (nul ...
-
Shell脚本报错:-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory
在学习shell中测试case参数命令代码如下 #!/bin/bash #switch测试 case $1 in start) echo 'start' ;; ...
-
ES6学习
一.ES6的特点 1.let(变量),const(常量) 2.在ES6中不能重复定义 3.块级作用域 普通作用域 if(true){ var test =1; } console.log(test); ...
-
PHP三元运算符
:条件 ? 结果1 : 结果2 <?php$a=10; $b=20;$c=$a>$b?($a-$b):($a+$b);//说明:如果变量a大于变量b则执行问号后面的,否则就执行:冒 ...
-
代码注释中的专有词——TODO、FIXME和XXX
[时间:2017-09] [状态:Open] [关键词:代码注释,TODO, FIXME, XXX] 阅读开源代码时可能经常遇到TODO.FIXME.XXX的单词,通常这些都是有其特殊含义的. 中文版 ...
-
MySQL 常用语法 之 UNION与UNION ALL
下面讲一下mySql中的union和union all 的功能以及区别 A union B 是将表A的数据和表B的数据连接成一张表,前提是查询的两张表的列数一定要一样否则出错. A union all ...