本节中我们通过创建几何空间点、曲面和采样线了解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内存模型与线程安全

    原文链接:blog.edreamoon.com Java内存模型 计算机cpu的运算能力强大,但是数据的存储相对于cpu运算能力需要消耗大量时间,为了充分利用运算能力引入了缓存,但是也为计算机系统带来 ...

  2. vim 正则非贪婪模式

    比如多匹配使用 .* 效果自然是贪婪模式,JS 的非贪婪很简单,是 .*? 即可,而 vim 不同,语法是 .\{-},注意 \ 转义.

  3. java并发线程池---了解ThreadPoolExecutor就够了

    总结:线程池的特点是,在线程的数量=corePoolSize后,仅任务队列满了之后,才会从任务队列中取出一个任务,然后构造一个新的线程,循环往复直到线程数量达到maximumPoolSize执行拒绝策 ...

  4. python之间的基础

    编程第一步 print('hello,world!') 变量名的命名的规则: 1:变量由字母,数字,下划线组成 2:变量不能以数字开头 3:禁止使用python中的关键字,如 'alse', 'Non ...

  5. JSON Web Token 入门教程

    原文地址:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html JSON Web Token(缩写 JWT)是目前最流 ...

  6. elasticsearch简单操作(二)

    让我们建立一个员工目录,假设我们刚好在Megacorp工作,这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录用于促进人文关怀和用于实时协同工作,所以它有以下不同的需求:1.数据能够包含 ...

  7. Jenkins - 构建Allure Report

    前言 本文为Pytest+Allure定制报告进阶篇,集成Jenkins,在Jenkins中直接生成报告,更方便测试人员查看. 一.安装插件allure-jenkins-plugin 1.进入系统管理 ...

  8. Python入门-用户登录程序升级版

    编写登陆接口 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程 ...

  9. webpack之loader和plugin简介

    webpack之loader和plugin简介 webpack入门和实战(二):全面理解和运用loader和plugins webpack入门(四)——webpack loader 和plugin w ...

  10. Tea Party CodeForces - 808C (构造+贪心)

    Polycarp invited all his friends to the tea party to celebrate the holiday. He has ncups, one for ea ...