1.1 从哪儿开始

对于多数的工程设计人员,不完全具备上节所述的各种条件。对于Civil 3D的应用可能比较熟悉;但对于计算机语言,只限于上学时所学的一点基础知识,步入工作岗位后与计算机语言基本无缘;对于C#、VB.net可能根本就没有接触过。

只要你有一颗坚定的心,坚持学习,就一定能进入Civil 3D二次开发的大门,写出自己的程序,从而节省自己的时间、调高工作效率。

如果您是一位熟悉Civil 3D软件应用的工程设计人员,那么您就要从学习计算机语言开始。如果您是一位精通计算机语言的专业程序设计人员,那么您就要先了解Civil 3D的应用。本书面向的读者是第一类人群,如果您是第二类人员,这本书应该不适合您。

既然要学习计算机语言,从哪里学起呢?这是个问题,并且是个不好回答的问题。既然这样,我们就从阅读代码开始,虽然简单粗暴,但我相信会很快见到成效。

在利用Civil 3D创建原始地形曲面过程中,我们经常遇到类似的需求:要把普通的AutoCAD对象,诸如点、文本、块等,转化成Civil 3D的几何空间点(CogoPoint)。对于点,Civil 3D有内部命令,可以直接实现转换,但对于文本、块等对象,没有内部命令,虽然我们可以利用数据提取等方法提取数据,创建外部文件,然后再创建几何空间点,但总会有些情况需要通过二次开发才能实现。假设我们需要将AutoCAD的块对象批量转换成几何空间点,我们需要写多少行代码才能实现呢?

让我们来看以下代码:

 public void BlockReferenceToCogoPoint()

 {

             //获取AutoCAD的Document对象

     Document doc = Application.DocumentManager.MdiActiveDocument;

             //获取Civil 3D的Document对象

     CivilDocument civilDoc = CivilApplication.ActiveDocument;

             //获取几何空间点集

     CogoPointCollection cogoPts = civilDoc.CogoPoints;

             //开始事务

     using (Transaction tr = doc.TransactionManager.StartTransaction())

     {

             //获取块表

             BlockTable blockTable=tr.GetObject(doc.Database.BlockTableId,OpenMode.ForRead)

                                    as BlockTable;

             //获取模型空间的ObjectId

             ObjectId modelSpaceId = blockTable[BlockTableRecord.ModelSpace];

             //获取块表记录(模型空间)

             BlockTableRecord modelSpace = modelSpaceId.GetObject(OpenMode.ForRead)

                                    as BlockTableRecord;

             //循环处理模型空间的每一个对象

             foreach (ObjectId id in modelSpace)

             {

                      //判断对象是否为BlockReference

                  if (!id.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(BlockReference))))

                                       continue;

                      //获取BlockReference对象

                  BlockReference br = id.GetObject(OpenMode.ForRead) as BlockReference;

                      //向几何空间点集中添加点

                  cogoPts.Add(br.Position, br.Layer, true);

             }

             //提交事务

             tr.Commit();

     }

 }

这是一段用C#语言完成的代码,代码实现的功能是根据模型空间中的块创建几何空间点,几何空间点的位置采用块的插入点位置,几何空间点的描述采用块的图层名称。

这段代码不到20行,不知道您想到了多少问题?在这里我想让初学者了解的问题可不止20个。下面就让我们来看一下我想到了哪些问题:

关于程序设计的基本问题:

编写这些代码需要什么环境?

如何编译?

编译后如何加载?

加载后如何运行?

什么是方法?

如何定义方法?

如何实现方法?

什么是变量?

如何声明变量?

变量命名规则有没有约定?

怎么为变量赋值?

数据类型都有哪些?

不同数据类型能否实现转换?

如何实现循环操作?

AutoCAD二次开发问题:

程序、文档、数据库之间的关系是?

如何定义一个在AutoCAD中运行的命令?

AutoCAD数据库结构是怎么的?

什么是块表(BlockTable)?

什么是块表记录(BlockTableRecord)?

什么是块参照(BlockReference)?

从AutoCAD数据库中,如何获取指定对象?

从ObjectId如何获取相应的Object?

事务(Transaction)是什么?

如果事务未提交(Commit)会有什么后果?

Civil 3D二次开发问题:

Civil 3D数据库结构是怎样的?

从Civil 3D数据库中,如何获取指定对象?

如何创建Civil 3D对象?

如何从集合中获取某一对象?

问题已经提出,就让我们带着这些问题阅读这本书的前两部分吧。在阅读过程中,本书中有讲解不清楚的地方,您应该学会网络搜索或查阅其他书籍,本书中个别地方提供了关键字以方便您进行搜索。

学习 Civil 3D二次开发从哪儿开始?的更多相关文章

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

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

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

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

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

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

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

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

  5. Civil 3D 二次开发 事务

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

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

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

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

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

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

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

  9. 【Python】Java程序员学习Python(二)— 开发环境搭建

    巧妇难为无米之炊,我最爱的还是鸡蛋羹,因为我和鸡蛋羹有段不能说的秘密. 不管学啥,都要有环境,对于程序员来说搭建个开发环境应该不是什么难题.按顺序一步步来就可以,我也只是记录我的安装过程,你也可以滴. ...

随机推荐

  1. 震惊!!!python可以用中文来写代码

    python可以用中文来写代码 说明: 偶尔间试了一下,python可以用中文来写代码,除了一些python内置函数,和运算符不能用中文外,其它的比如新定义的类名.函数名.变量名,甚至是函数间传的参数 ...

  2. keras神经网络三个例子

    keras构造神经网络,非常之方便!以后就它了.本文给出了三个例子,都是普通的神经网络 例一.离散输出,单标签.多分类 例二.图像识别,单标签.多分类.没有用到卷积神经网络(CNN) 例三.时序预测, ...

  3. 聊聊我是如何自学Java两年的(上)

    没啥经验,说说心路历程吧~~ 过两天就9月1号了,正式成为大三生,没错,我就是如此嫩~~~ 萌芽在初中 初一的时候,电视广告结尾都会放一句,我们的网站是.....于是心里琢磨,网站是怎么建的呢?我可以 ...

  4. python实现本地图片上传到服务区

    本地图片上传到服务器,其本质上来讲,就是读取本地图片,复制到服务器,并返回服务器url 前端代码,用的form表单提交,form表单中包含两个文件选择表单元素,选择文件,点击提交按钮,提交form表单 ...

  5. vue内置组件 transition 和 keep-alive 使用

    1.transition name - string,用于自动生成 CSS 过渡类名.例如:name: 'fade' 将自动拓展为.fade-enter,.fade-enter-active等.默认类 ...

  6. Spring集成Quarz开发环境搭建

    第一步,搭建Spring相关的环境,参照:http://www.cnblogs.com/dyh004/p/4645572.html 第二步,下载Quartz相关的压缩文件,解压,下载地址:http:/ ...

  7. ICPC青岛站网络赛-C-高效模拟

    嗯这道辣鸡题,当时我队友写了错误的代码,我稍微改动了,思路基本上是对了,但是就是超时,我第一直觉是我这个算法思路是没有任何问题的,但是就是TLE,我感觉这个算法已经优化的不能再优化了啊...后面就怀疑 ...

  8. CodeIgniter框架通过URL向控制器传递参数

    通过URL传递参数的方法是GET,在CodeIgnter框架中,通过URL有两种方式向控制器传递参数: 一种是键值对的形式. 一种是类似于文件路径的形式,这个时候,不是以键值对的形式了,我们只传递值. ...

  9. 解决mysql1336

    1.mysql字符集与插入数据字符集不匹配 USE 数据库名称SHOW VARIABLES LIKE 'character%'SET character_set_server=utf8;SET cha ...

  10. Pycharm中怎么给字典中的多个键-值对同时加上单引号

    今天看了个爬虫视频,崔庆才讲师的免费视频, 里面一个批量给header加引号2s完成,这波操作让我眼前一亮. 最终还是发现了骚操作的背后手速是真的快. pycharm中按ctrl+r 勾选右上角的Re ...