本节中我们通过创建几何空间点、曲面和采样线了解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方法中添加相应代码。现在你的代码应该类似如下:

  1. 01 class CivilCreateEntityDemo
  2.  
  3. 02 {
  4.  
  5. 03 protected Document doc;
  6.  
  7. 04 protected Database db;
  8.  
  9. 05 protected Editor ed;
  10.  
  11. 06 protected CivilDocument civilDoc;
  12.  
  13. 07 public CivilCreateEntityDemo() //构造函数
  14.  
  15. 08 {
  16.  
  17. 09 doc = Application.DocumentManager.MdiActiveDocument;
  18.  
  19. 10 ed = doc.Editor;
  20.  
  21. 11 db = doc.Database;
  22.  
  23. 12 civilDoc = CivilApplication.ActiveDocument;
  24.  
  25. 13 }
  26.  
  27. 14 virtual public void CivilCreateEntity() //可重写的虚方法
  28.  
  29. 15 {
  30.  
  31. 16 ed.WriteMessage("\n我什么也没做!");
  32.  
  33. 17 }
  34.  
  35. 18 public void GetString(string mess, ref string stringOut) //获取字符串
  36.  
  37. 19 {
  38.  
  39. 20 PromptStringOptions pso = new PromptStringOptions(mess);
  40.  
  41. 21 pso.UseDefaultValue = true;
  42.  
  43. 22 pso.DefaultValue = stringOut;
  44.  
  45. 23 PromptResult pr = ed.GetString(pso);
  46.  
  47. 24 if (pr.Status == PromptStatus.OK)
  48.  
  49. 25 {
  50.  
  51. 26 stringOut = pr.StringResult;
  52.  
  53. 27 }
  54.  
  55. 28 }
  56.  
  57. 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. mongodb java3.2驱动 测试 一些记录

    mongo驱动包 自带线程池的概念 获取 MongoClient mongoClient 后 通过客户端(mongoClient ) 获取 库操作 MongoDatabase 获取 表操作 Mongo ...

  2. UITableView 和 UITableViewController

    UITableView:显示有多行数据的一个列. 新建一个过程:Xcode -> File -> New -> Project...,然后选择iOS -> Applicatio ...

  3. java 基础 异常

    抛出异常 和 捕获异常案列 //异常方法的重写

  4. 关于学习JAVA第二章的心得

    这章主要讲了JAVA的变量,数据类型和运算符的使用方法及规则. 其实在大一的时候接触过一点C和C++的知识所以对变量,数据类型,运算符还是有一定了解的. 变量其实就是存储数据的空间.我们每次使用某一种 ...

  5. 史上最全面的Neo4j使用指南

    Neo4j图形数据库教程 Neo4j图形数据库教程 第一章:介绍 Neo4j是什么 Neo4j的特点 Neo4j的优点 第二章:安装 1.环境 2.下载 3.开启远程访问 4.测试 第三章:CQL 1 ...

  6. gulp + gulp-better-rollup + rollup 构建 ES6 开发环境

    gulp + gulp-better-rollup + rollup 构建 ES6 开发环境 关于 Gulp 就不过多啰嗦了.常用的 js 模块打包工具主要有 webpack.rollup 和 bro ...

  7. 《React Native 精解与实战》书籍连载「配置 iOS 与 Android 开发环境」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  8. D1. Great Vova Wall (Version 1)

    链接 [https://codeforces.com/contest/1092/problem/D1] 题意 给你n个位置墙的高度,现在你有2×1 砖块,你可以竖直或者水平放置 问你是否可以使得所有位 ...

  9. Python学习第十八篇——低耦合函数设计思想

    import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...

  10. java 8中抽象类与接口的异同

    1.java 8中抽象类与接口的异同 相同点: 1)都是抽象类型: 2)都可以有实现方法(以前接口不行): 3)都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口中默认方法不需要实现者实 ...