这一小节,我们创建派生于CivilCreateEntityDemo的类CivilCreateCogoPoint,来创建几何空间点。

1 创建类并添加字段及方法

首先在项目资源管理器中向本项目中添加类,名称为CivilCreateCogoPoint,转到文本编辑器,先为类添加几个字段:

01     static int PointNumber = 1;

02     static string PointName = "CogoPoint";

03     static string PointDesc = "手动创建的几何空间点";

04     CogoPointCollection cps;

这里需要注意的是关键字static,表示这几个字段为静态字段,关于静态字段的您可以查询C#相关书籍获取更多资料。在声明静态字段的同时为其赋值初始化。

接下来添加构造函数,可以在文本编辑器中直接键入构造函数,也可以通过以下方式进行添加:查看该类的类图,鼠标右键菜单中添加→构造函数。如下图:

5‑8 添加构造函数

返回文本编辑器,添加基类。在类名称后面添加:“冒号 基类名称”,之后看起来应该像下面这样:

class CivilCreateCogoPoint : CivilCreateEntityDemo

鼠标悬停在基类名称处,出现 图标后单击或直接采用快捷键Shift+Alt+Q弹出如下窗口:

5‑9 实现虚方法

单击Implement Virtual Methods,出现如下对话框,并按下图进行勾选:

5‑10 选择要实现的虚方法

现在文本编辑器中的的代码应该与下面类似:

 class CivilCreateCogoPoint : CivilCreateEntityDemo

 {

     static long PointNumber = ;

     static string PointName = "CogoPoint";

     static string PointDesc = "手动创建的几何空间点";

     CogoPointCollection cps;

     public CivilCreateCogoPoint()                                                      //构造函数

     {

             throw new System.NotImplementedException();

     }

     override public void CivilCreateEntity()                                      //重写基类方法

     {

             throw new NotImplementedException();

     }

 }
1 实现方法

这里需要注意的是第11行代码中的关键字override,这表示该方法将重写基类中的方法。接下来我们完成这两个方法:

首先是构造函数,有时派生类的构造函数需要调用基类的构造函数,可在派生类构造函数后面输入“冒号 base(相应的参数列表)”,本例中基类构造函数只有一个,所以只需添加“: base()”。在构造函数中添加以下代码:

01 public CivilCreateCogoPoint() : base()

02 {

03     GetString("\n输入几何空间点名称前缀", ref PointName);

04     GetString("\n输入几何空间点描述", ref PointDesc);

05     cps = civilDoc.CogoPoints;

06 }

代码第3、4行用于在类初始化过程中从命令行获取几何空间点名称前缀及描述文本。第5行,是Civil 3D二次开发中经常要用到的方法——从Civil 3D文档中获取特定的集合。下面先来看一下civilDoc这个字段,这个字段是基类的字段,为了使派生类能够访问,使用了protected关键字来修饰。其值是什么?我们可以回到基类的构造函数看一看:

civilDoc = CivilApplication.ActiveDocument;

有关更详细的信息可以回到Civil 3D对象层次结构相关章节进行再此进行消化。

字段CogoPointCollection cps为几何空间点集,我们可以直接从civilDoc中使用属性CogoPoints来获取。这是Civil 3D中各种几何获取的常用方法,在后续文章中曲面等对象集合,也是通过类似方法获取的,您要注意分析总结。

接下来我们看一看本节的核心内容,方法CivilCreateEntity,在此方法中,我们将通过在屏幕上拾取点,来创建几何空间点。

01 override public void CivilCreateEntity()

02 {

03     PromptPointOptions ppo = new PromptPointOptions("\n拾取点:");

04     PromptPointResult ppr = ed.GetPoint(ppo);

05     if (ppr.Status != PromptStatus.OK) return;

06     Point3d pt = ppr.Value;

07     ObjectId pointId = cps.Add(pt, false);

08     using (Transaction tr = db.TransactionManager.StartTransaction())

09     {

10             CogoPoint cp = pointId.GetObject(OpenMode.ForWrite) as CogoPoint;

11             cp.PointName = PointName + PointNumber;

12             cp.RawDescription = PointDesc;

13             tr.Commit();

14     }

15     PointNumber++;

16     CivilCreateEntity();

17 }

第3-6行代码之前章节多次出现,从屏幕上获取点,不再解释。

第7行代码,是Civil 3D创建对象的常用方法——很多对象的创建都是通过向其集合中添加新对象的方式来实现的。该方法返回值为创建对象的ObjectId。

第8-14行,对新创建的几何空间点的属性进行了设置,在设置前,需要开启事务将其打开,因为这个几何空间点已经添加到数据库中了。

第15行,对点号进行了递增,这个点编号与Civil 3D的点编号不同,这里只是为了演示类的静态字段如何工作,可能会引起混淆。程序加载后,用这个程序创建了多少个几何空间点,将由这个静态字段来统计。

第16行,调用自己——递归,重复执行操作,以便连续创建多个点。在拾取点的过程中,按下Esc键将退出。

完成命令,转到MyCommands类中,添加方法如下:

01 [CommandMethod("MyGroup", "CCCP", CommandFlags.Modal)]

02 public void CivilCreateCogoPoint()

03 {

04     CivilCreateEntityDemo cced = new CivilCreateCogoPoint();

05     cced.CivilCreateEntity();

06 }

注意代码的第4行,等号左侧变量类型为基类CivilCreateEntityDemo,而等号右侧却是新建的派生类CivilCreateCogoPoint。

编译加载,输入命令CCCP,输入点名称及描述,拾取点、拾取点……按下ESC。

我第一次执行命令过程中没有改变点名称及描述,在第二次执行时修改了这两个值,如果第三次执行该命令,这两个值是什么呢?您可以试验一下,然后体会静态字段的用处。命令执行完后,在工具空间中找到点编组→所有点,查看一下刚创建的几个点。

现在再次回忆一下创建几何空间点的步骤:获取CivilDocument,获取CogoPoints,然后Add。就这么简单,在MyCommands类中添加如下方法:

01 [CommandMethod("MyGroup", "Test", CommandFlags.Modal)]

02 public void Test()

03 {

04     CivilApplication.ActiveDocument.CogoPoints.Add(new Point3d(),false);

05 }

编译加载,输入命令,test,看能否在原点创建一个几何空间点。方法中的代码是不是只有一行?

文档→集合→Add,记住了吗?

对比一下AutoCAD对象的创建过程,Civil 3D对象的创建是不是很简单呢?

有没有更多的方法创建几何空间点呢?来让我们查看一下Civil 3D .NET API Reference,能够找到如下信息,这里有6种重载的方法,我们可以根据不同的情况选择适合的方法,具体的用法查看API Reference,以后类似情况将不再介绍。

5‑12 CogoPointCollection.Add重载方法

问题:有哪些对象的创建方法与创建几何空间点类似?

Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点的更多相关文章

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

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

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

    本节中我们通过创建几何空间点.曲面和采样线了解Civil 3D对象的创建方法.因Civil 3D对象的创建方法相比AutoCAD对象创建要简单的多,比如创建一个几何空间点,最简单的情况采用一行代码(没 ...

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

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

  4. Civil 3D 二次开发 事务

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

  5. Java开发学习教程之对象的创建与使用

    java面向对象中的对象创建与使用.类是对象的抽象,为对象定义了属性和行为,但类本身既不带任何数据,也不存在于内存空间中.而对象是类的一个具体存在,既拥有独立的内存空间,也存在独特的属性和行为,属性还 ...

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

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

  7. Civil 3D 二次开发 名称模板不能正常工作

    using Autodesk.AECC.Interop.Land; using Autodesk.AECC.Interop.UiLand; using Autodesk.AutoCAD.Applica ...

  8. Civil 3D 二次开发 新建CLR项目出现错误C2143

    新建CLR项目出现错误C2143 按照Objectarx Training创建.net混合项目,编译时出现一下错误: 原因不明: 解决方法: 在Stdafx.h文件中添加: #define WIN32 ...

  9. Civil 3D 二次开发 翻转曲面高程分析颜色

    不解释,直接上代码及截图. [CommandMethod("RvsSEA")] public void ReverseSurfaceElevationAnalysis() { Ci ...

随机推荐

  1. FineUIMvc随笔(3)不能忘却的回发(__doPostBack)

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户反馈 有网友在官方论坛抛出了这么一个问题,似乎对 FineUIMvc 中的浏览器端与服务器端的交互方式很有异议. 这里面的关 ...

  2. [C#]SQL Server Express LocalDb(SqlLocalDb)的一些体会

    真觉得自己的知识面还是比较窄,在此之前,居然还不知道SqlLocalDb. SqlLocalDb是啥?其实就是简化SQL Server的本地数据库,可以这样子说,SQL Server既可以作为远程,也 ...

  3. Java基础之数据比较Integer、Short、int、short

    基础很重要,基础很重要,基础很重要.重要的事情说三遍,. 今天聊一聊Java的数据比较,这个范围比较大,基础类型的比较.引用类型的比较. 前提: 1.Java和c#都提供自动装箱和自动拆箱操作,何为自 ...

  4. 十九、多文件上传(ajaxFileupload实现多文件上传功能)

    来源于https://www.jb51.net/article/128647.htm 打开google 搜索"ajaxFileupload' ‘多文件上传"可以搜到许许多多类似的, ...

  5. awk分析mysql状态

    今天是腊月27,明天是腊月28,一到过年,就习惯说农历,而不说公历.这两天挺闲的,就再造一把. 话说Linux处理文本工具有三剑客,awk.grep.sed,其中awk最为厉害,grep也挺是常用.今 ...

  6. [2018福大至诚软工助教]UML设计小结

    [2018福大至诚软工助教]UML设计小结 一.得分 总分(50分) 团队信息 (4分) 队名 (1分) 团队成员的学号与姓名(需要标注队长)(1分) 本次作业的博客链接(1分) 三者完全,4分 团队 ...

  7. CNZZ友盟访问明细的采集办法

    www.cnzz.com是中文网站统计分析平台,很多站长需要获取网站提供的访问明细,以做分析. 直接采集这个网站的数据相当麻烦,通过浏览器或者fiddlercore就简单多了. 2.0新版,通过浏览器 ...

  8. WinRAR从入门到高级的操作技巧集合

    一.基础技巧 1.批量建立文件夹 如果在工作中,经常要建立很多相同文件夹结构(如在备份数据时).那可以把这个繁琐的工作让WinRAR完成:先在“资源管理器”中把多个文件夹结构建好(包括其下的子文件夹) ...

  9. Shell脚本命令图片

    查看相关文档:shell脚本1  shell脚本2

  10. PAT L2-020 功夫传人

    https://pintia.cn/problem-sets/994805046380707840/problems/994805059118809088 一门武功能否传承久远并被发扬光大,是要看缘分 ...