当前位置:文档之家› chapter4_02_1

chapter4_02_1

土木工程CAD技术基础第四章:计算机图形技术

清华大学土木工程系

张建平

第四章:计算机图形技术

4-1基本图形生成

4-2图形几何变换

4-3图形显示处理

4-4 工程绘图程序设计

4-1 基本图形生成

常用的坐标系 用户坐标系

z用户描述或输入图形的坐标系

z一般取直角坐标系,取值范围是实数域,单位是任意的。

设备坐标系

z图形设备输出图形的坐标系

z一般为二维坐标,取值范围是某一个整域,常用单位是光栅单位和脉冲当量。

规格化坐标系

z虚拟的坐标系,与设备无关,

通常取无量纲单位。

基本图形元素

矢量图形

z以直线段作为基本元素

z矢量图形生成器:

随机扫描显示器

笔式绘图仪

光栅图形

z以点作为基本元素

z光栅图形生成器:

光栅扫描显示器

静电绘图仪和喷墨绘图仪

直线和直线图形

1. 生成直线的基本算法

问题的提出

z笔式绘图仪: 任意一条斜直线,是由x, y方向的直线组合成的阶梯线来近似。

直线由什么样的阶梯线近似?画笔的每一步方

向如何确定?

z光栅扫描显示器: 显示任意一条直线,是确定发亮的象素点最佳逼近直线。

如何选择发亮的象素最佳逼近直线?

----取决于生成直线的基本算法

----取决于生成直线的基本算法

基本原理:“增量法”

z产生x 和y 两个方向的“走步”信号,据此指示电子束偏移或绘图笔动作。

x走步=△x/step

y走步=△y/step

其中:△x, △y ----直线起始点到终止点x, y方向上的位移量;

step ----设备的单位步长。

各种方法的不同点

z判断、生成x, y信号的过程和方法不同

z发送的命令不同

z各自更为适应的设备对象不同

生成直线的常用算法

z笔式绘图仪——逐点比较法、正负法;

z光栅扫描显示器——DDA法、Bresenham法对称DDA法简单DDA法

直线和直线图形

2.直线的属性 线宽

z直线的宽度一般是在设备坐标下定义

z把设备能产生的最小直线宽度作为基准,再定义二倍宽或四倍宽的直线。

线型

z长度定义一般在用户坐标系下进行

Tline( x1, y1, x2, y2, dy1, dk1,lt)

dy1:实线长度、dk1:虚线长

lt:线型名

dkl d yl SL

(x 1, y 1 )

ang (tx,ty )( x 2, y 2 )

z 虚线生成步骤:

①设线段长部分和:

dem = 0线段长:21

2212)y (y )x (x SL ?+?=

②x

0 =

x1,y0= y1 dem= dem+ dyl 若: dem> SL连线(x

1

, y1 ) →(x2, y2 )

若: dem

+ dem* cos(ang)

ty= y0+ dem*sin(ang)

连线(x

1

, y1 ) →(tx, ty)

dem=dem+dkl

若: dem> SL返回

若: dem< SL x

1

=x0+dem * cos(ang)

y1=y0+dem * sin(ang)返回②实线段的终点实线段的起点

z点划线

颜色

z取决于光栅扫描系统可以提供的颜色

直线和直线图形:

3. 直线图形

折线集

z Pline(n, wpoint)

矩形

z两点式

z点差式

矩形网格

正多边形

标高线

教材:P56 尺寸线

矩形

矩形的生成按输入变量分类,有两种形式:z两点式

?已知:两个角点坐标P1、P3;

?矩形与水平轴的夹角ang

?思路:求出P2、P4点的坐标,依次连接P1、

P2、P3、P4各点。

?设:Cs = cos(ang),Sn= sin(ang)

dx= P3x C s+P3y S n–p1x C s –P1y S n

dy= –P3x S n+P3y C s +p1x S n –P1y C s

P2x = dx C s +p1x P2y= dx S n+p1y P4x = –dy S n+p1x

P4y= dy C s +p1y

P

1

P

2

P

3

P

4

ang

dy dx

z 点差式

?已知:矩形左下角点坐标P 1;

边长dx 、dy

矩形与水平轴的夹角ang

?思路:求出P 2、P 3、P 4点的坐标,依次连

接P 1、P 2、P 3、P 4各点。

#include

#include

#include "dbents.h"

#include "math.h"

//#include "geassign.h"

#include "dbapserv.h"

#include "adslib.h “

void initApp();

void unloadApp();

void firstARX();

void drawRect();编程绘制点差式矩形

ObjectARX 头文件声明两个应用函数

void initApp()

{

acedRegCmds->addCommand("firstARX_Commands",//命令组名

"firstARX",//全球命令名

"第一次",//本地/翻译命令名

ACRX_CMD_TRANSPARENT,//命令模式

firstARX);//被调用的函数

acedRegCmds->addCommand("firstARX_Commands",//命令组名

"DRAWRECT",//全球命令名

“绘制矩形”,//本地/翻译命令名ACRX_CMD_TRANSPARENT,//命令模式

drawRect);//被调用的函数

}

void unloadApp()

{

acedRegCmds->removeGroup("firstARX_Commands");}

添加了两条命令。

void firstARX()

{

ads_alert("这是我的第一个ARX应用程序!");

}extern "C" AcRx::AppRetCode

acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)

{

switch (msg) //msg参数是AutoCAD传递给应用程序的消息{

case AcRx::kInitAppMsg://解锁应用程序,这样它才能被卸载

acrxDynamicLinker->unlockApplication(pkt);

acrxRegisterAppMDIAware(pkt);

initApp();

break;

case AcRx::kUnloadAppMsg:

unloadApp();

break;

default:

break;

}

return AcRx::kRetOK;

定义应用函

数,显示一个

提示对话框

用于消息处理的主入口点,传递消息到应用程序

AcDbObjectId createLine(AcGePoint3d startPoint, AcGePoint3d endPoint){AcDbObjectId objId;

AcDbLine *pLine;//初始化一个AcDbLine 类的指针AcDbBlockTable *pBlockTable;AcDbBlockTableRecord *pBlock;

//打开块表

acdbHostApplicationServices()->workingDatabase()->

getBlockTable(pBlockTable,AcDb::kForRead);

//打开模型空间块表段,获得当前块表记录,并关闭块表

pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock, AcDb::kForWrite);pBlockTable->close();

//向当前块表记录中添加直线对象

pLine = new AcDbLine(startPoint, endPoint);

pBlock->appendAcDbEntity(objId, pLine);

pBlock->close();

pLine->close();

//返回直线对象ID

return objId;

}

该函数创建一条直线。AutoCAD 图形数据库

// This is command 'DRAWRECT'

void drawRect(){// TODO: Implement the command

double sideA, sideB, angle;

ads_point pt;

AcGePoint3d point[4];

AcGeVector3d vector1, vector2;//偏移向量

//获取基点坐标

if(acedGetPoint(NULL, "\nBase point: ", pt) != RTNORM)

return;

//输入矩形一边边长

if(acedGetDist(pt, "\nLength of one side: ", &sideA) != RTNORM)

return;

//输入矩形另一边边长

if(acedGetDist(pt, "\nLength of another side: ", &sideB) != RTNORM)

return;

//输入矩形转角

if(acedGetAngle(pt, "\nAngle of rotation: ", &angle) != RTNORM)

return;

该函数绘制矩形。

相关主题
相关文档 最新文档