收藏本站
设为首页收藏本站

【天端--工程在线】

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3117|回复: 2
打印 上一主题 下一主题

一种实现横断面图绘制的新方法(转载)

[复制链接]
跳转到指定楼层
1
发表于 2007-3-11 10:13:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一种实现横断面图绘制的新方法
庄稼丰
(中交第二公路勘察设计研究院,武汉,430052)
作者简介庄稼丰:工程硕士研究生,研究方向为道路CAD.
提 要针对当前路线CAD系统中绘制横断面图存在的问题,在AutoCAD环境中利用先进的ObjectARX技术实现了横断面图的自动绘制和交互排版,极大地提高了横断面图的绘制效率.
关 键 词AutoCAD,ObjectARX,横断面图,自动绘制,交互排版
0 引 言
路线CAD系统经过多年的发展,取得了长足的进步.横断面图绘制是路线CAD系统的重要组成部分,它将设计项目中的横断面数据按用户提出的图框,比例,标注内容等要求绘制出来,供施工使用.横断面图是路线施工图设计中数量最多的图纸,能否迅速完成绘制横断面图的工作是整个设计能否按时完成的重要制约因素, 因此能否提供高效灵活的横断面图绘制手段是衡量路线CAD系统水平的一个重要标志.横断面图的绘制工作可分为两部分:一是单个横断面绘制工作,即根据用户提出的比例,标注内容等要求将某个桩号的横断面绘制出来;二是排版工作,即依据桩号顺序将绘制出来的单个横断面排列于一定图幅尺寸和格式的图框中.对于大多数路线CAD系统来说,图形绘制工作都能较好地完成,而对于排版工作却不能令人满意地完成,它是绘制横断面图的难点.下面将着重讨论横断面图绘制中的排版工作.
1 横断面图的自动绘制和交互排版
目前,已有的CAD系统中横断面图基本上都采用自动绘制的方式,而排版工作却有两种方法:

(1) 手工交互排版.系统每生成一个横断面,用户就根据这个横断面的具体情况,利60 计算机辅助工程 2000用目测的方法和一定的交互工具经过数次反复调整来确定横断面在图框中的位置,利用这种方法用户可以将横断面图排得美观,合理,但效率非常低,使用起来很不方便;
(2)全自动排版.计算机根据用户定义的规则进行排版,一次性将横断面图全部生成.

(2) 由于横断面图千变万化,有很多特殊的断面,个人的排版习惯也不相同,因此定义排版规则都不太一样,且排版规则只能定义得较为粗浅,如定义每张图中横断面的行数和列数,或定义横断面间不相交,这样虽然可以很快画出所有横断面图,但画出来的横断面图非常
死板,不合理之处很多,修改的工作量也较大.例如定义了每张图中横断面的行数和列数,在绘制过程中会遇到某一个横断面填挖很
大的情况,这样按排版规则做的横断面就会相互交叉,遇到这种情况可通过两种编辑方法来消除交叉问题:一是修改这一横断面的绘制比例,在Auto CAD中利用命令将这一横断面进行缩放,而对于标注的文字又要保持原来的大小,处理起来比较麻烦;二是调整横断面的位置,如果排不下,将多余的移到下一页;如果下一页本来就排的很满,就要将下一页的所有横断面都移动,并将多余的横断面移到再下一页,这样影响面就非常大.利用定义横断面间不相交规则生成的横断面图,往往排列较稀松,对于填挖很大的横断面也没有很好的处理方式,只能通过Auto CAD命令手工修改.可见通过全自动排版生成的横断面图,再利用手工修改非常困难.从上面的分析可以看出单独地使用手工交互排版或全自动排版都不能很好地完成横断面图的排版工作.要想提高手工交互排版的效率,必须引入自动化功能;要想使全自动排版达到满意的效果,必须采用交互排版工具来修改.因此在绘制横断面图过程中应该采用自动绘制和交互排版相结合的方式,这样才能提高绘制横断面图的工作效率.CAD设计系统作为一个人工系统,用户在应用CAD系统进行设计时,应该遵循何种人机交互原则,才能最有效地发挥这一"人机系统"的能力,就成为研究和设计CAD系统的中心问题.通过分析,我们确定了如下的工作流程:

(3) (1)自动绘图.根据用户定义的图框大小,绘制比例,选择的标注内容,字体大小,横断面的行数和列数,本页起始桩号即分页桩号等参数系统自动绘制一张横断面图,并将下一页的起点桩号设为分页桩号;

(4) (2)交互排版.用户通过手工交互排版使横断面图布局合理,如果图面较空,可在当前的横断面图中添加一个横断面,系统会根据设计项目数据记录自动将分页桩号移到下一个桩号,在添加以前可以调整绘制比例,以实现同一张横断面图中绘制不同比例的横断面;
如果排不下,可通过AutoCAD命令删除本页最后一个横断面,系统会自动将分页桩号移到上一个桩号;
(3)保存.如果用户对排版满意可以将这一张横断面图存盘,让系统根据分页桩号绘制下一张横断面图前,可以重新调整绘制比例,横断面的行数和列数等参数,使下一张横断面的自动绘制更加合理.这样在横断面图的绘制过程中自动化和交互排版相结合,绘制效率将会大幅度提高.
No.3 一种实现横断面图绘制的新方法 61
————————————————————————————————————————————
2 利用Object ARX实现交互排版
交互排版是本方法的重要组成部分,是否有强有力的交互排版工具将直接影响到横断
面图的绘制效率.我们分析了实现交互排版的难点,认为它主要有两个问题要解决:横断
面在图形中的重新定位和分页桩号记录的处理.现在AutoCAD提供了先进的ObjectARX技
术,我们利用这项技术来解决这两个问题.
2.1 横断面在图形中的重新定位
在横断面图交互排版中,横断面的重新定位非常频繁,提供良好的定位手段非常必要.
原来横断面图中每个横断面都是由线段和文字等基本实体组成的,重新定位时要将需要移
动的每个实体都选到,操作起来非常麻烦,后来将每个横断面做成块,这样整体移动起来
比较方便,但对于想移动横断面中的一部分如标注表,就要将块炸开,重新回到基本实体
的状态.标注表是整个横断面的一部分,用户在使用过程中希望整个横断面移动时,标注
表要跟着移动;而移动标注表时,横断面的其他部分不动.利用AutoCAD中块的概念实现
上述功能非常困难.
我们利用Object ARX中自定义实体技术,定义了一个如下横断面图实体,其中包含了
两个位置控制点,分别控制横断面的位置和标注表的位置:
class CrossSectionDrawing:public AcDbEntity
{ …… doublem_Stake;//横断面桩号
AcGePoint3dPos_Center;//横断面的位置控制点
AcGePoint3dPos_Pane;//标注表的位置控制点
……
}
标注表的几何位置由控制点Pos_Pane来确定,横断面图实体中其他部分的几何位置由
控制点Pos_Center来确定,控制点Pos_Center和Pos_Pane的初始相对位置由路基宽度和
填挖情况来确定.
当用户使用鼠标选择实体时,getGripPoints()函数会返回实体中定义的抓取点,并在
屏幕上显示,我们重载getGripPoints()函数,将两个控制点加入到返回的抓取点列表中,
这样两个控制点就可作为抓取点显示在屏幕上.当用户将选中的抓取点进行拖动操作,
AutoCAD就调用moveGripPointsAt()函数,重新计算相应部分的几何位置,这样就实现了
重新定位.
使用过程中,用户只需选择要重新定位的横断面,拖动不同的抓取点就可以完成整个
横断面的重新定位和标注表的单独重新定位,使用起来非常方便.
2.2 分页桩号记录的处理
从前述的工作流程我们可以看到,分页桩号是整个横断面图绘制过程中的一个纽带,
它确定了横断面图每页起始桩号,在交互排版过程中由于要增加或减少横断面它不断地被
62 计算机辅助工程 2000
————————————————————————————————————————————
修改.如果分页桩号是通过人工管理的,在横断面图绘制过程中用户必须花较多的精力来
关注分页桩号的变化情况,这样不利于提高效率,而且容易出错.所以分页桩号必须由系
统自动管理,让用户的精力集中于具体的排版工作.
在绘制横断面图对话框中我们设置了一个变量记录分页桩号,在当前横断面图中添加
横断面时,命令由绘制横断面图对话框发出,记录分页桩号的变量可以直接修改;但当删
除横断面时,命令由AutoCAD发出,这时需要修改记录分页桩号的变量,用以往方式处理
非常困难.
在Object ARX中提供了对通告——反应器机制的支持.当AutoCAD系统中的一个事件
发生时,某些对象(我们称为通告者notifiers)就自动地将该事件传递到其它对象.例如:
当用户拷贝,删除或修改一个对象时,每个事件的相应的通告就会自动触发.接收事件的
AutoCAD对象就是反应器.反应器在它能够从通告者那里接受事件之前,必须明确地添加到
该通告者的反应器列表中.
我们以数据库反应器类为基类定义了新的反应器类,并重载了在数据库对象上接受
erased()通告的函数:
class DbModReactor : public AcDbDatabaseReactor
{
public:
virtual void objectErased(const AcDbDatabase* dwg,const AcDbObject*
dbObj,Adesk::Boolean pErased = Adesk::kTrue);
};
当用户利用AutoCAD 命令删除实体时,objectErased()函数被触发,它先获取删除对
象的类名,如果是CrossSectionDrawing类,再获取被删除横断面的桩号,随后修改绘制
横断面图对话框中记录分页桩号的变量,这样就实现了分页桩号的自动管理.
在应用中必须先产生绘制横断面图对话框,再产生一个DbModReactor对象,并通过
addReactor()函数将其加入到当前图形数据库的反应器列表中,这样通告——反应器机制
才能实现.
利用Object ARX技术使横断面的交互排版灵活方便,提高了横断面图的绘制效率.
3 结 论
本文根据人机一体的思想,在横断面图绘制过程中采用自动绘图和交互排版相结合的
新方法,使横断面图的绘制效率得到很大的提高.利用先进的ObjectARX技术在AutoCAD
环境中实现了提出的新方法.
No.3 一种实现横断面图绘制的新方法 63
————————————————————————————————————————————
参 考 文 献
12
张国峰.C++语言及其程序设计教程.电子工业出版社
Autodesk Inc . ObjectARX Reference Manual.
A New Method of Drawing Cross Section
Zhuang Jiafeng
(No.2 Highway Mapping and Design Institute,Wuhan,430052)
ABSTRACT The problem of Drawing Cross Section in road CAD is discussed in this
paper. Using ObjectARX programming technology implements Cross Section's
Automatic Drawing and Interactive typesetting. This method improves efficiency of
Drawing Cross Section.

评分

参与人数 1天端币 +10 收起 理由
hzg771007 + 10 支持共享,奖励!!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
2
发表于 2007-4-29 17:20:45 | 只看该作者
不错,谢谢!
回复 支持 反对

使用道具 举报

3
发表于 2007-11-10 20:23:03 | 只看该作者
东西太多了,实在看不董,希望楼主发一些简单的好吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

特别声明:本站资料全部来自互联网和网站会员上传,若侵犯作者权益请与本站联系,我们将在24小时内删除!
管理员:〖快乐小屋〗 QQ:273469910 邮箱:273469910@qq.com

QQ|Archiver|手机版|【天端--工程在线】    

GMT+8, 2024-12-27 03:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表