|  客服中心  |  合作联系
搜刊网
论文下载
您当前位置
首页 > 论文下载 > 信息科技 > AutoCAD二次开发中控制指标块修改功能的实现
AutoCAD二次开发中控制指标块修改功能的实现
来源:互联网 qikanw | 曹晓亮1 周冬梅2
【分  类】 信息科技
【关 键 词】 二次开发;指标修改;.NET;AUTOCAD
【来  源】 互联网
【收  录】 中文学术期刊网
正文:

  摘 要: 本文介绍了利用.NET平台下的C#语言对AutoCAD2007进行二次开发的技术,原理及方法。利用该技术,通过对话框的形式简单快速的实现了AutoCAD中控制指标块的修改功能。

  关键词: 二次开发;指标修改;.NET;AUTOCAD

  在城市控制性详细规划中,控制指标块属性的修改是很重要的一部分,根据对话框的形式可以修改指标块的各参数值,并更新到属性窗和指标块中,若依靠CAD本身的功能只能从特性中进行修改,这样操作不仅不方便而且容易出错。利用AutoCAD二次开发技术,可以通过界面对话框的形式对控制指标块进行修改,根据实际需要输入新的属性值后,控制指标块中的属性值就会随之更新,从而达到了快速修改指标块中的各类属性值的目的。

  1.开发工具的选择

  对开发人员来说,开发语言的选择对于功能的实现起到很重要的作用。在CAD的二次开发中,目前,广泛应用的语言有VBA、Visual lisp 、Object ARX等。Object ARX功能虽强大,但 C++这门语言的高门槛让许多人望而却步。Visual lisp 、VBA语言虽然简单,但功能相对较弱,尤其是面向对象的功能支持不好,从而限制了这两种语言的使用。.NET是微软新推出的开发平台,它具有众多优点。基于.NET平台对AutoCAD进行二次开发,可充分利用.N ET的各种优势,大大提高开发速度。本文利用C#语言对Auto CAD进行二次开发,实现了控制指标块属性修改的功能。

  2.实现原理与方法

  实现AutoCAD的二次开发,必须使用AutoCAD.NET托管封装类,这些托管封装类包含在两个托管模块中。要加入对这两个托管模块的引用,可通过“添加引用”,找到AutoCAD的安装目录,在目录下找到acdbmgd.dll和acmgd.dll组件,并打开这两个组件。这样就可以将这两个托管类添加到引用中。正如它们的名字所表示的,acdbmgd.dll包含Object DBX托管类,而acmgd.dll包含AutoCAD托管类。

  在编辑代码完成后进行编译,将得到一个.dll文件。在AutoCAD2007命令行中输入

  “netload”加载该.dll文件,加载成功后即可以通过程序调用命令如“ZBXG”,实现所编译代码的功能。

  本文中的控制指标块,从实体的类型上说是块实体。但这种指标块不同于在CAD中创建的普通快,它包含了大量的属性信息。在控制指标块的修改中,当用户选中指标块后,会弹出属性修改的对话框,用户可以根据需要修改对话框中的属性值。

  3.修改功能的开发与实现

  通过对话框的形式,修改各地块的控制指标数值,并将对话框中设置的新参数值,通过代码读取到属性窗口进行更新。图1、图2分别为原控制指标块、原控制指标块的属性窗

 

  图1 原控制指标块 图2 原控制指标块属性窗

  在指标块的属性修改中,首先判断选择的实体是否为控制指标块,本文利用过滤器通过块名加以判断,当选取的实体为控制指标块时,弹出修改指标块的对话框,否则,返回。关键代码如下:

  public void ZBXG()

  {

  Database db = HostApplicationServices.WorkingDatabase;

  Editor ed = App.DocumentManager.MdiActiveDocument.Editor;

  PromptSelectionOptions prSel = new PromptSelectionOptions();

  prSel.MessageForAdding = "\n选择指标块实体:";//提示选择

  prSel.SingleOnly = true;//只应许选择一个

  TypedValue[] selectValues = new TypedValue[] { new ypedValue((int)DxfCode.BlockName, "控制指标*") };//只选择"控制指标块"

  SelectionFilter filter = new SelectionFilter(selectValues);

  PromptSelectionResult prRes = ed.GetSelection(prSel, filter);

  using (Transaction trans = db.TransactionManager.StartTransaction())

  {

  BlockReference br = (BlockReference)trans.GetObject(prRes.Value[0].ObjectId, OpenMode.ForWrite);

  AttributeCollection att = br.AttributeCollection;//获取块的属性

  for (int i = 0; i < att.Count; i++)

  {

  AttributeReference attref = (AttributeReference)trans.GetObject(att[i], penMode.ForWrite);

  zdm.ZBXG.str_zbxg[i] = ttref.TextString;

  }

  trans.Commit();//提交事务处理

  ZBXG zbxg = new ZBXG();

  zbxg.brZBXG = br;

  Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(zbxg); } }

  弹出修改对话框后,用户可根据需要进行修改,属性值修改后的对话框如图3所示。

  图3 控制指标修改对话框

  从图3中可以看出,各面积参数之间存在一定的关系,即:

  建筑面积=容积率*用地面积

  道路面积=总面积-用地面积-绿地面积

  在控制指标修改对话框中,用户可以根据需要修改相应的参数值,其中用地性质还可以通过单击。“…按钮”进行选择。当选择了用地性质后,容积率、建筑密度、绿地率、建筑限高、自行车位参数、机动车位参数和总户数参数会自动填写,这7个参数与用地性质的类型密切相关,一般不要去更改。总面积、用地面积和绿地面积可以从textBox中输入,也可以通过其后“…按钮”获取,获得的各类面积值满足以上所述的关系。这5个textBox控件的控制代码很类似,都采用了Leave事件,当鼠标的光标离开时,textBox的值会随着各面积参数之间的关系计算得出的值而发生变化,这样就可以保证修改后的指标块的参数是正确的。实现该功能的主要代码如下所示(以绿地面积为例):

  private void txtLDMJ_Leave(object sender, EventArgs e)

  {double zmj = double.Parse(txtZMJ.Text.ToString());//获取总面积的值

  double ydmj = double.Parse(txtYDMJ.Text.ToString());//获取用地面积的值

  double ldmj = double.Parse(txtLDMJ.Text.ToString());//获取绿地面积的值

  double dlmj = zmj - ydmj - ldmj;//道路面积=总面积-用地面积-绿地面积

  if (dlmj < 0.00)//道路面积不能为负数

  { labMessage.Visible = true;//显示错误信息}

  txtDLMJ.Text = dlmj.ToString();

  }

  修改好指标块各参数后,要将新的参数值更新到属性窗口,各参数值的更新方法类似,在此,只以地块编码和用地性质为例,其他的属性值也可按照类似的方法更新。更新方法的主要代码:

  private void btnOk_Click(object sender, EventArgs e)

  {

  BlockReference br = (BlockReference)brZBXG;

  Autodesk.AutoCAD.DatabaseServices.AttributeCollection att = br.AttributeCollection;

  for (int i = 0; i < att.Count; i++)

  {

  AttributeReference attref = (AttributeReference)trans.GetObject(att[i], OpenMode.ForWrite);

  //更新属性值

  if (attref.Tag == "地块编码")

  attref.TextString = txtDKBH.Text.ToString();

相关推荐
热门期刊
家畜生态学报《家畜生态学报》
《家畜生态学报》杂志,于1980年经国家新闻出版总署批准正式创刊,CN:61-1433/S,本刊在国内外有广泛的覆盖面,题材新颖,信息量大、时效性强的特点,其中主要栏目有:生态养...
矿物岩石《矿物岩石》
《矿物岩石》(季刊)创刊于1980年,由四川省矿物岩石地球化学学会、成都理工大学主办。刊载矿物学、岩石学、矿床地质、地球化学方面的研究成果。 《矿物岩石》介绍岩...
青少年科技博览《青少年科技博览》
《青少年科技博览》杂志,月刊,于1993年经国家新闻出版总署批准正式创刊,由天津市教育委员会主管,天津师范大学主办的学术性刊物,本刊在国内外有广泛的覆盖面,题材新颖,...
门球之苑《门球之苑》
电话:010-63326712。地址:北京市西城区白云路1号白云大厦801室。 《门球之苑》(双月刊)创刊于2002年,出版地:北京,CN:11-5536/G8,ISSN:1673-8276,开本:大16开。 《门球之...
现代教育科学《现代教育科学》
《现代教育科学》杂志,于2007年经国家新闻出版总署批准正式创刊,CN:22-1339/G4,本刊在国内外有广泛的覆盖面,题材新颖,信息量大、时效性强的特点,其中主要栏目有:高等教...
口腔颌面修复学《口腔颌面修复学》
《口腔颌面修复学杂》杂志,于1999年经国家新闻出版总署批准正式创刊,CN:11-4424/R,本刊在国内外有广泛的覆盖面,题材新颖,信息量大、时效性强的特点,其中主要栏目有:牙...
友情链接
中教杯 国家新闻出版总署 中国知网 万方数据 维普网 中国科学院 中国国家图书馆 央视英文版 中国留学网 中青网 中国国家人才网 中国经济网 中国日报网 中国新闻网 中国学术期刊网
关于我们
平台简介
诚聘英才
企业文化
竞争优势
版权信息
服务条款
客服承诺
常见问题
版权声明
合作加盟
期刊加盟
广告服务
联系我们
网站导航
期刊大全
论文下载
课题申报
学术会议
编辑QQ
编辑联络
2007-2023
中文学术期刊检索机构
bianjibu777@qq.com
联系我们

版权所有©2007- 2023 中国学术期刊网(qikanw.com) All Rights Reserved 京ICP备2021008252号
本站是学术论文网络平台,若期刊网有侵犯您的版权,请及时与期刊网客服取得联系,联系信箱: bianjibu777@qq.com    
中国学术期刊网