土木在线论坛 \ 装修设计 \ 装修设计效果图 \ 一种实现横断面图绘制的新方法(转载)2

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

发布于:2008-01-03 14:14:03 来自:装修设计/装修设计效果图 [复制转发]
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.
  • a0708010503
    a0708010503 沙发
    :):o:o:victory:看不懂
    2013-03-22 16:31:22

    回复 举报
    赞同0
这个家伙什么也没有留下。。。

装修设计效果图

返回版块

36.84 万条内容 · 234 人订阅

猜你喜欢

阅读下一篇

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

作者简介庄稼丰:工程硕士研究生,研究方向为道路CAD.提 要针对当前路线CAD系统中绘制横断面图存在的问题,在AutoCAD环境中利用先进的ObjectARX技术实现了横断面图的自动绘制和交互排版,极大地提高了横断面图的绘制效率.关 键 词AutoCAD,ObjectARX,横断面图,自动绘制,交互排版0 引 言路线CAD系统经过多年的发展,取得了长足的进步.横断面图绘制是路线CAD系统的重要组成部分,它将设计项目中的横断面数据按用户提出的图框,比例,标注内容等要求绘制出来,供施工使用.横断面图是路线施工图设计中数量最多的图纸,能否迅速完成绘制横断面图的工作是整个设计能否按时完成的重要制约因素, 因此能否提供高效灵活的横断面图绘制手段是衡量路线CAD系统水平的一个重要标志.横断面图的绘制工作可分为两部分:一是单个横断面绘制工作,即根据用户提出的比例,标注内容等要求将某个桩号的横断面绘制出来;二是排版工作,即依据桩号顺序将绘制出来的单个横断面排列于一定图幅尺寸和格式的图框中.对于大多数路线CAD系统来说,图形绘制工作都能较好地完成,而对于排版工作却不能令人满意地完成,它是绘制横断面图的难点.下面将着重讨论横断面图绘制中的排版工作.

回帖成功

经验值 +10