配电网CAD 系统中文本标注技术与应用.pdf_第1页
配电网CAD 系统中文本标注技术与应用.pdf_第2页
配电网CAD 系统中文本标注技术与应用.pdf_第3页
配电网CAD 系统中文本标注技术与应用.pdf_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

配电网配电网 CAD 系统中文本标注技术与应用系统中文本标注技术与应用 The text label technology and application of CAD system power distribution network 南京工业大学 李兰友 黄晓伟 邵定宏 陶科 Li Lanyou Huang Xiaowei Shao DingHong Tao Ke 摘要摘要 本文介绍了矢量绘图系统中文本标注技术的原理和方法 结合配电网 CAD 系统的开 发 给出了在 VC 开发环境下多行文本标注的具体实现方法 标注文本能和系统图形同步 显示 具有矢量性 且编辑时能动态更新 关键词关键词 文本标注 配电网 CAD 矢量图形 Abstract This paper introduces the principle and method of the text label technology based on vector graph system Combined with the development of the CAD system power distribution network the specific implementation of multi lined text label is proposed with VC programming environment The label text can synchronize with system graph have vector characteristics and dynamically update when edited KeyWords Text label Power distribution network CAD Vector graph 中图分类号 TP311 文献标识码 A 1 引言引言 随着计算机技术的飞速发展 计算机辅助设计即 CAD 技术在各个领域的应用越来越广 泛 而配电网 CAD 系统就是一个专门用于矿井供电设计与计算分析的辅助系统 对保证煤矿 安全生产有着重要作用 在开发配电网 CAD 系统时 涉及到文本标注技术 在 VC 开发环 境下 TextOut 函数只能输入单行文本的功能 根本无法满足系统需要 有必要对文本标 注技术进行研究 本文详细介绍配电网 CAD 系统中文本标注的实现方法 2 文本标注简介文本标注简介 文本是 CAD 图形系统中最重要的组成部分之一 可以说是图形的固有组成部分 它与其 他图形元素紧密结合 对图形进行简要的描述和注释 恰当的标注文本 可以增进看图人对 视图的了解 保证准确理解所绘图形的含义 而在一些工程制图中 文本标注更是不能缺少 的 工程图样上的尺寸是施工 生产的重要依据 它也是构成图样的一个极其重要的组成部 分 任何图形无论绘制得多么完整美观 如果没有正确的标注尺寸 就不能正确地制成机械 零件 形成建筑产品 在配电网 CAD 系统中 有许多图例代表的设备 当绘制时 需要同时 显示其设备型号和主要参数 这就需要研究多行文本标注技术 实现涉及文本的相关操作 AutoCAD 软件中有多行文本标注与单行文本标注两种形式 分别通过命令 DTEXT MTEXT 或者相应菜单项来实现 它们的区别在于多行文本标注可以连续输入多行文字作 为输入单位 当选取对象时 此多行文字是一个整体对象 可以一次性被选取 进行编辑等 相关操作 配电网 CAD 系统中文本标注实现时是将单行文本标注的功能合并到多行文本标注 中 通过字符组合 r 和 n 加以区别 也可作为一个整体对象一次性被选取 进行编辑 同时具有控制字体属性及字符间距 旋转标注文本 编辑时动态更新和同步显示 包括和系 统中图形同步缩放 等常见 AutoCAD 软件功能 3 文本标注技术实现方法文本标注技术实现方法 3 1 实现流程 配电网 CAD 系统是基于 GIS 技术的 以 MFC 文档视图构架的绘图计算分析平台 在设计 时 将文本标注的相关操作抽象成一个文本标注类 CText 并且把此类当作是 8 个基本图形 元素类 CLine 直线类 CPline 连续直线类 CSpline 曲线类 CCircle 圆类 CArc 圆弧类 CEllipse 椭圆类 CRects 矩形类 和 CText 文本类 之一来设计 文本标注类的作用是负责文本的显示 文本标注类主要涉及了如下属性 显示的文本内容 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛 文本的长度 文本的起始点 文本块左下角顶点 文本显示时使用的字体 文本的字体高 度和宽度 文本的标注角度 字体的旋转角度 文字之间的间隔 字体的粗细 是否有下划 线 删除线以及是否为斜体 文本类的构造函数如下所示 CText CString strText CPoint3D StartPoint CString strTextFont double fTextHeight double fTextWide double fAngle1 double fAngle2 double fOffWide int nWeight BOOL bStrikeOut BOOL bUnderLine BOOL bItalic 文本存储时为一个字符串 通过换行和分裂字符串综合使用 实现多行文本标注 功能 由于显示的文本可以是多行文本 所以无法将一个多行的文本块一次输出 同时每行的 文字与文字之间有一个人为设置的间隔 所以也不能一次输出整行文本 文本的输出采用一 个一个文字的输出方式 文字与文字之间包含一定的间隔 遇到字符组合 r 和 n 就换行 输出 因为回车键的效果就相当于输入这两个字符 在输出文字的时候分别考虑三种情况 如果是中文文字 输出两个字符 加上一个间隔 如果是英文文字 输出一个字符 加上一 个间隔 如果是回车 则直接换行 不加间隔 程序设计流程图如图 1 所示 文本绘制通过 其 OnDraw 函数来实现 关键程序代码如下所示 void CText Draw CDC pDC int nDrawMode CFont cjcf 定义一个字模 const char cLs 定义控制字符串操作的指针 GetRect fMinx fMiny fMaxx fMaxy 获得文本可绘图区域 if IsRectCrossView fMinx fMiny fMaxx fMaxy return 判断是在可绘图视图区域中 if m bSelected 文本被鼠标选择后特殊显示 CPen pen 0 1 RGB 0 255 0 CPen pOldPen pDC SelectObject 设定画笔 GetTxtBlkHeightAndWidth nBlkHeight nBlkWidth 获取标注文本的高度和宽度 cjcf CreateFont nHigh nWide int m fAngle1 10 int m fAngle2 10 m nWeight m bItalic m bU nderLine m bStrikeOut DEFAULT CHARSET OUT CHARACTER PRECIS CLIP CHARACTER PRECIS DEFAULT QUA LITY DEFAULT PITCH FF DONTCARE m strTextFont 创建字模 cLs const char m strText 文本内容 nCd strlen cLs 文本字符长度 while nCd 0 绘制字符 strncpy cBz cLs 2 读取两个字符 if unsigned char cBz 0 127 跳过汉字指向下一个字符位置 pDC TextOut VPoint x VPoint y cBz 在屏幕上写这个汉字 nCd 2 字符数减 2 下一个字符的显示位置 DPoint x DPoint x m fTextWide 2 m fOffWide cos fAng1 DPoint y DPoint y m fTextWide 2 m fOffWide sin fAng1 DPtoVP DPoint VPoint 实际坐标相逻辑坐标转换 else if cBz 0 r dLineLocX DPoint x DPoint y dLineLocY m fTextHeight cos fAng1 dLineLocY DPoint y cLs 2 跳过这一个字符到下一个字符 nCd 2 字符数减 2 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛 else cBz 1 0 如果是一个西文字符 pDC TextOut VPoint x VPoint y cBz 在屏幕上写字符 DPoint x DPoint x m fTextWide m fOffWide double cos fAng1 DPoint y DPoint y m fTextWide m fOffWide double sin fAng1 cLs 跳过这一个字符到下一个字符 nCd 字符数减 1 下一个字符实际坐标相逻辑坐标转换 DPtoVP DPoint VPoint 3 2 文本选中处理 当文本被选中时需要对文本进行特殊显示 将文本块的边框用四条直线段描绘起来 就 体现了特殊显示的效果 这时需要用到文本的起始点 标注角度以及调用函数 GetTxtBlkHeightAndWidth 获得文本块的高度和宽度 有了这些值才能计算出文本块的四 个顶点坐标 然后用直线连接这四个点 其中函数 GetTxtBlkHeightAndWidth 特别重要 在文本的显示和获得文本区域的函数中都将使用到这个函数 其处理策略如图 2 所示 4 文本标注示例文本标注示例 3 3 文本旋转处理 图 1 绘制文本的流程图 图 2 获得文本图形块高度和宽度的处理策略 图 2 中分三种情况进行讨论 分别对汉 字 回车和英文字符进行了处理 每种情况 中对当前行宽的计算都不同 在汉字处理中 因为汉字占两个字符 所以当前行宽要在原 来的基础上加上两个字符的宽度和一个文字 间距 如果是英文字符 那么只要加一个字 符宽度和一个文字间距就可以了 但是如果 是回车 那么当前行宽保持不变 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛 3 3 文本旋转处理 文本旋转通过旋转坐标点的方法来实现 它需要三个要素 第一个是旋转的基点 第二 个是旋转的角度 第三个是待旋转点 假定旋转基点坐标为 00 yx 顺时针旋转的角度为 待旋转点坐标为 11 yx 旋转后点的坐标 22 yx可以用下列公式计算 yy xxxxsin cos 010102 1 cos sin 010102 yyxxyy 2 有了这个公式就可以定义旋转点函数 RotatePoint CPoint3D OriginalPoint CPoint3D BasePoint double fAngle CPoint3D黄晓伟 1983 男 工程师 邵定宏 1959 男 汉 族 江苏阜宁人 副教授 主要研究方向 神经网络 网络技术 陶科 1981 男 硕士 主要从事配电网 CAD 方面的研究 BiographyBiography LI Lan you 1983 Male Han Zhoukou Henan province Master student of Nanjing University of Technology Major in CAD CAM 210009 南京工业大学信息科学与工程学院 李兰友 College of Information Science and Engineering Nanjing University of Technology Nanjing 210009 China Li Lanyou 210009 南京工业大学信息科学与工程学院 李兰友 College of Information Science and Engineering Nanjing Univers

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论