工程图的二次开发基础.ppt

上传人:小飞机 文档编号:6570178 上传时间:2023-11-13 格式:PPT 页数:59 大小:452.50KB
返回 下载 相关 举报
工程图的二次开发基础.ppt_第1页
第1页 / 共59页
工程图的二次开发基础.ppt_第2页
第2页 / 共59页
工程图的二次开发基础.ppt_第3页
第3页 / 共59页
工程图的二次开发基础.ppt_第4页
第4页 / 共59页
工程图的二次开发基础.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《工程图的二次开发基础.ppt》由会员分享,可在线阅读,更多相关《工程图的二次开发基础.ppt(59页珍藏版)》请在三一办公上搜索。

1、第8章 工程图的二次开发基础,CAD二次开发技术及其工程应用,多媒体课件,本章内容:,8.1 绘图环境的设定8.2 程序化绘图过程8.3 常用绘图程序的编制8.4 可视化图库建立方法,8.1 绘图环境的设定,一 图纸初始化设置 1 绘图单位设置(1)系统的绘图单位:长度、角度和基准角度方向。长度单位的默认值为小数制形式,角度单位的默认值为十进制数形式,默认值:零度方向是东,X轴正向,正增量取逆时针方向。(2)绘图单位的设定,可采用两种形式 用命令UNTIS,调用“图形单位”对话框;通过LISP编程实现绘图单位的设置。最简单的形式使用 command函数来实现。,2 系统变量的设置 系统存储操作

2、系统的变量有398个,每一个系统变量都有一种数据类型,如整型、实型、字符串型、实体型等;根据其值读写特性可分为只读性和读写性;系统允许用户根据需要自己定义系统变量。可根据需要,可以重新设置AutoCAD系统的有关变量值。在lisp语言中改变系统变量的方法有两种,(1)利用command函数调用系统命令来实现;(2)利用setvar函数直接设定系统变量的值。,在程序设计时处理的方式有以下三种:(1)把需要变更值变量(如OSMODE等)的原始值保存。(setq oss(getvar“OSMODE”)(setq oll(getvar“CLAYER”)(setq occ(getvar“CECOLOR”

3、)(setq oaa(getvar“AUNITS”)(2)把系统变量的值进行重新设定。(setvar“OSMODE”1);捕捉方式设为端点捕捉(setvar“CLAYER”2);把当前层选择为2层(command“CECOLOR”3);把当前颜色值设定为3,即绿色(command“AUNITS”3);置当前角度单位为:弧度形式(3)函数结束时,恢复系统变量值。(setvar“OSMODE”oss);捕捉方式设定为端点捕捉(setvar“CLAYER”oll);把当前层选择为2层(command“CECOLOR”occ);把当前颜色恢复为保存值(command“AUNITS”oaa);置当前角度

4、单位为弧度,3 图纸幅面选定 根据国家的相关标准,图纸的幅面分为五种幅面形式。图幅是图纸的大小规格,图框是提供绘图范围的边界线。,图纸幅面及图框尺寸,4 绘图比例 绘图比例是图形与其实物相应要素的线性尺寸之比;在绘图时,应从国标规定中选取适当的绘图比例;由于绘图比例对图形实体度量、定位有重要影响,甚至对其它图形要素产生影响,在二次开发的过程中,通常把绘图比例作为自定义系统变量,并采用保存在图形文件中。,绘图比例表,二 图纸初始化程序设计,初始化程序设计需确定图幅大小,绘图比例和标题栏式样等。根据输入的数据分为两类:(1)确定图纸的结构参数(2)标题栏中填写的数据 而这些需要通过对话框的形式提请

5、用户输入或选定。,初始化设置对话框参考格式,N,初始化设置程序流程图,三 图层和比例设定,1 图层、颜色和线型 在绘制图形时,充分利用图层工具,把具有相同图形特征的图形分别设置在不同的图层上,并其进行属性设定。在对图形进行图层设定时,应考虑以下几个问题:(1)既可方便图形的绘制,又便于管理和编辑图形。(2)划分图层时,注意将颜色、线型等统一筹划。(3)便于观察和过滤,提高图形的处理速度。,2 标记字样设置 根据图样要求规定,绘制图样时,应首先进行系统的环境设置,当绘图模块需要书写字体时,再选用相应的字体式样。,四 LISP程序的自动装入,1.程序的自动装入 AutoCAD系统每次启动时,将两个

6、文件自动装入:ACAD.LSP;系统主菜单同名,扩展名为“.mnl”的文件 AutoCAD系统搜索库路径是按照下列顺序进行:当前目录 包含当前绘图文件的目录 ACAD环境变量所指定的目录 包含AutoCAD程序文件的目录,2.程序的自动执行 在AutoCAD系统启动的过程中,不仅有程序的自动装入,同时也有函数的自动执行。当系统启动时,就会在内存中自动寻找一个特殊函数“S:STARTUP”,如果找到该函数,就会自动执行该函数。用户定义的函数“S:STARTUP”一般放在ACAD.LSP或*.mnl文件中,这样就保证函数在AutoCAD系统启动时,自动被执行。当然“S:STARTUP”也可以在许多

7、地方定义,不管函数在什么地方定义,但总是遵循一个原则,即后面的定义覆盖前面的定义。,1 用CAD系统命令绘制图形过程 从右图图形的结构可以看出,图形的绘制过程分为三部分:(1)绘制矩形(2)绘制对角线(3)绘制圆,8.2 程序化绘图过程,一 程序化平面绘图命令,为了实现绘图过程的程序化,必须首先熟悉绘图命令的执行过程,在编写绘图程序时使用比较多的lisp函数是command函数,该函数的表数据是CAD系统有关该绘图命令的操作过程。,(1)绘制矩形命令:RECTANG指定第一个角点或倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W):(用鼠标拾取P1点)指定另一个角点或 尺寸(D):(用

8、鼠标拾取P3点)(2)绘制对角线命令:PLINE指定起点:(用鼠标拾取P1点)当前线宽为 0.0000指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):拾取P3点指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):命令:PLINE指定起点:(用鼠标拾取P2点)当前线宽为 0.0000指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):w指定起点宽度:1 指定端点宽度:指定下一个点或圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):拾取P4点指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/

9、放弃(U)/宽度(W):,(3)用多义线绘制圆命令:PLINE指定起点:(用鼠标拾取P1和P2的中点)当前线宽为 1.0000指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):A指定圆弧的端点或角度(A)/圆心(CE)/放弃(U)/宽度(W):CE指定圆弧的圆心:(用鼠标拾取Pc点)指定圆弧的端点或角度(A)/圆心(CE)/宽度(W):拾取P3和P4的中点指定圆弧的端点或角度(A)/圆心(CE)/放弃(U)/宽度(W):CL命令:PLINE指定起点:(用鼠标拾取P1)当前线宽为 1.0000指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):A

10、指定圆弧的端点或角度(A)/圆心(CE)宽度(W):CE 拾取Pc点指定圆弧的端点或角度(A)/圆心(CE)/宽度(W):拾取P3指定圆弧的端点或角度(A)/圆心(CE)/宽度(W):CL,2 用Lisp编程绘制图形(defun C:hzpmt(/ss cc p1 p2 p3 p4 pc);定义函数名称、形参和局部变量(setq ss(getvar OSMODE);保存系统变量OSMODE的值(setq cc(getvar CECOLOR);保存系统变量CECOLOR的值(setvar osmode 512);设定OSMODE的新值,512表示捕捉最近点(prompt n先选取矩形左下和右上角

11、点坐标);屏幕提示用户操作信息(setq p1(getpoint n左下点:);输入矩形左下角点坐标 p3(getpointn右上点);输入矩形右上角点坐标(setq p2(polar p1 0(-(car p3)(car p1);计算其余两点坐标p4(polar p1(/pi 2.0)(-(cadr p3)(cadr p1)(setvar CEcolor red);设定当前绘图颜色为红色(command pline p1 w 2 2 p2 p3 p4 c);用多义线命令绘矩形(command pline p1 w 2 2 p3);用多义线命令绘对角线(command pline p2 w 2

12、 2 p4)(setq pc(inters p1 p3 p2 p4);求两对角线之交点(command pline(polar p1 0(/(-(car p3)(car p1)2.0)w 1 1 A CE pc(polar p4 0(/(-(car p3)(car p1)2.0)CL);用多义线命令画内切圆(command pline p1 w 1 1 A CE pc p3 CL);用多义线命令画外接圆,(command color 5);设定当前绘图颜色为蓝色(command style standard 宋体 0 1 0);设置字体的格式(command text p1 8 0 P1;在指

13、定位置书写字符 text p2 8 0 P2 text p3 8 0 P3 text p4 8 0 P4 text pc 8 0 Pc)(setvar OSMODE ss);恢复原来目标捕捉方式(setvar CECOLOR cc),二 程序化平面编辑命令 1 用CAD系统命令编辑图形过程(1)裁剪内切圆内的对角线(2)连接P8P7线段和P5P6线段(3)裁剪内切圆(4)裁剪矩形(5)裁剪外接圆,2 Lisp编程编辑图形(defun C:bjpmt(/ss cc p5 p6 p7 p8 e e1 eb);定义函数名称、形参和局部变量(setq ss(getvar OSMODE);保存系统变量O

14、SMODE的值(setq cc(getvar CECOLOR)(setvar osmode 512);设定OSMODE的新值,512表示捕捉最近点(prompt n先剪裁圆周内的对角线:);屏幕提示用户操作信息(setq eb(entsel 选择圆周为裁减边界:);裁减内切圆内的对角线(command trim eb(entsel 选择直线1:)(entsel 选择直线2:)(setvar osmode 1);设OSMODE的值为端点捕捉(command pline(setq p5(getpoint n捕捉P5:);连接P5P6 w 1 1(setq p6(getpoint n捕捉P6:)(s

15、etq e(entlast);保存P5P6实体到e中(command pline(setq p7(getpoint n捕捉P7:);连接P7P8 w 1 1(setq p8(getpoint n捕捉P8:)(setq e1(entlast);保存P5P6实体到e1中(setvar osmode 512)(command color 5),(command style standard 宋体 0 1 0);写P5p6p7p8点字符(command text p5 8 0 P5 text p6 8 0 P6 text p7 8 0 P7 text p8 8 0 P8)(command trim e

16、(entsel 选择P5P6下边的圆弧:);裁剪P5P6下边圆弧(command trim e1(entsel 选择P7P8下边的圆弧:)(setq eb(entsel 选择外圆周为裁减边界:);裁剪P7P8下边圆弧(command trim eb(entsel 选择矩形左边:);裁剪矩形左边(command trim eb(entsel 选择矩形右边:);裁剪矩形右边(setq eb(entsel 选择P3P4为裁减边界:);裁剪P3P4上边圆弧(command trim eb(entsel 选择P3P4上边的圆弧:)(setq eb(entsel 选择P1P2为裁减边界:)(command

17、 trim eb(entsel 选择P1P2下边的圆弧:);裁剪P1P2下边圆弧(setvar osmode ss);恢复原来的目标捕捉方式(setvar CECOLOR cc),二 程序化三维绘图命令 在AutoCAD系统中,绘制三维图形可以通过两种方式实现,一种是直接输入三维实体的控制尺寸,由AutoCAD系统的相关函数自动生成;另一种是先产生二维图形,然后,通过旋转或拉伸等方式再生成三维图形。在绘制三维图形的过程中,为了准确完整地表达三维实体的立体形状,经常从不同的方向观察实体。由于世界坐标系是唯一的、固定不变的,所以,通过不断的建立用户坐标系,实现用户观察点的变化,以达到不同的表达效果

18、。建立用户坐标系,在AutoCAD系统中是通过VPOINT命令来实现的。,1 基本体素的绘制(1)平面立体的绘制命令:BOX指定长方体的角点或 中心点(CE):100,100,100指定角点或 立方体(C)/长度(L):L指定长度:200指定宽度:150指定高度:90命令:ZOOM指定窗口角点,输入比例因子(nX 或 nXP),或全部(A)/中心点(C)/动态(D)/范围(E)/上一个(P)/比例(S)/窗口(W):E命令:VPOINT当前视图方向:VIEWDIR=0.0000,0.0000,1.0000指定视点或 旋转(R):1,1,1,LISP源程序如下:(defun C:hzcft()(

19、command BOX(list 100 100 100)L 200 150 90)(command ZOOM E)(command VPOINT(list 1 1 1),(1)回转体的绘制命令:TORUS当前线框密度:ISOLINES=4指定圆环体中心:100,100,100指定圆环体半径或 直径(D):60指定圆管半径或 直径(D):10命令:ZOOM指定窗口角点,输入比例因子(nX 或 nXP),或全部(A)/中心点(C)/动态(D)/范围(E)/上一个(P)/比例(S)/窗口(W):E命令:VPOINT当前视图方向:VIEWDIR=0.0000,0.0000,1.0000指定视点或 旋

20、转(R):1,1,1正在重生成模型。命令:ISOLINES输入 ISOLINES 的新值:30命令:REGEN正在重生成模型。,LISP源程序如下:(defun C:hzyh()(command TORUS(list 100 100 100)60 10)(command zOOM E)(command VPOINT(list 1 1 1)(COMMAND ISOLINES 30)(COMMAND REGEN),2 组合实体的绘制 绘制组合实体图形,首先要进行形体分解,把实体分成若干部分,然后分别进行绘制。从右图中可以看出,该实体构造分为主体部分和附属结构两部分。在绘制实体图形时,要注意用户坐标

21、系(UCS)的转换,通过转换用户坐标系可以使作图过程简单化。,(1)用CAD系统命绘制图形在用AutoCAD作图时,分为主墙体、房顶、门结构和侧面墙的窗户四部分,每一部分的绘制都定义了相应的用户坐标系。绘制主墙体部分命令:RECTANG当前矩形模式:厚度=0.0000指定第一个角点或倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W):E指定矩形的标高:指定第一个角点或倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W):T指定矩形的厚度:270指定第一个角点或倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W):0,0指定另一个角点或 尺寸(D):400,260命令:VPO

22、INT当前视图方向:VIEWDIR=0.0,0.0,1.0指定视点或旋转(R):1,1,1命令:ZOOM 指定窗口角点,输入比例因子(nX 或 nXP),或全部(A)/中心点(C)/动态(D)/范围(E)/上一个(P)/比例(S)/窗口(W):a,绘制房顶部分命令:UCS当前 UCS 名称:*世界*输入选项 新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W):3指定新原点:(用鼠标拾取P1点,图8-16所示)在正 X 轴范围上指定点:(用鼠标拾取P2点,图8-16所示)在UCSXY平面的正Y轴范围上指定点:(用鼠标拾取P2点,图8-

23、16所示)命令:PLINE指定起点:-65,0当前线宽为 0.0000指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):325,0指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):130,135指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):C命令:EXTRUDE选择对象:(用鼠标拾取刚绘制三角形)指定拉伸高度或 路径(P):400指定拉伸的倾斜角度:,绘制门结构图形 命令:UCS当前 UCS 名称:*没有名称*输入选项 新建(N)/移动(M/应用(A)/?/世界(W):3指定新原点:(鼠标拾取

24、P3点)在正 X 轴范围上指定点:(用鼠标拾取P4点)在 UCS XY 平面的正 Y 轴范围上指定点:(用鼠标拾取P2点)命令:ELEV指定新的默认标高:指定新的默认厚度:-10命令:PLINE指定起点:240,0指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):W指定起点宽度:5指定端点宽度:指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):240,150 指定下一点或 圆弧(A)/宽度(W):160,150 指定下一点或 圆弧(A)/宽度(W):160,0 指定下一点或 圆弧(A)/宽度(W):,命令:ELEV指定新的默认标高:0 指定新

25、的默认厚度:0 命令:PLINE指定起点:200,0 当前线宽为 10.0 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):w 指定起点宽度:0 指定端点宽度:0 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):200,1500 指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):命令:ELEV指定新的默认标高:指定新的默认厚度:-5,命令:PLINE指定起点:215,100 当前线宽为 5.0000 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):w 指定起点宽度:1 指定端

26、点宽度:1 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):225,100 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):225,90 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):215,90 指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):C 命令:PLINE指定起点:185,100 当前线宽为 1.0000 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):175,100 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽

27、度(W):175,90 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):185,90 指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):C,绘制侧面墙上的窗图形命令:UCS当前 UCS 名称:*没有名称,图8-17所示。输入选项 新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W):3 指定新原点:(鼠标拾取P1点,图8-17所示)在正 X 轴范围上指定点:(鼠标拾取P2点,图8-17所示)在 UCS XY 平面的正 Y 轴范围上指定点:(鼠标拾取P3点,图8-17所示)

28、命令:PLINE指定起点:180,135 当前线宽为 1.0000 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):180,235 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):80,235 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):80,135 指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):C,命令:PLINE指定起点:180,185 当前线宽为 1.0000 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):w 指定起点宽度:0 指定

29、端点宽度:0 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):80,185 指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):命令:PLINE指定起点:130,235 当前线宽为 0.0000 指定下一个点或 圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W):130,135 指定下一点或 圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W):(4)消隐显示图形命令:HIDE正在重生成模型。,(2)Auto LISP编程绘制图形,(defun C:hzfz(/ss cc p5 p6 p7 p8 e e1

30、eb);定义函数名称、形参和局部变量(setvar osmode 0)(setq w 260 h 270 l 400 mw 80 mh 150 mck 10 ch 100);设定结构化参数;绘制主墙体部分(command elev 0 h)(setq p(list 0.0 0.0 0.0)p2(list l w 0.0)p1(list l 0 0)p3(list 0 w 0)(command pline p w 0 0 p1 p2 p3 c);绘制墙体(command vpoint(list 1 1 1);设定视点,第一次UCS,;绘制房顶部分(setq p4(list(car p)(cadr

31、 p)h)p5(list(car p3)(cadr p3)h)p6(list(car p)(cadr p)(+h 20)(command elev 0 0)(command ucsicon off)(command ucs 3 p4 p5 p6);第二次UCS p4 p5 p6确定(command ucsicon on)(setq p3(list w 0 0);绘制房顶截面形状(command pline(polar p pi(/w 4)w 0 0(polar P3 0(/w 4)(list(/(+(car p)(car p3)2)(+(cadr p)(/h 2)0.0)c)(setq e(e

32、ntlast)(command extrude e l 0);将截面形状沿其法线方向拉伸(setq p1(list(+(car p)w)0 0)p2(list(+(car p)w)(-0 h)0)p3(list(+(car p)w)(-0 h)l),;绘制门结构图形(command ucs 3 p2 p3 p1);第三次UCS p2 p3 p1确定(command elev 0-10)(setq p1(polar p 0(/l 2)(command pline(setq p2(polar p1 0(/mw 2)w 5 5;绘制门框(setq p2(polar p2(/pi 2)mh)(setq

33、 p2(polar p2 pi mw)(polar p1 pi(/mw 2)(command elev 0 0)(command pline p1(polar p1(/pi 2)mh);绘制中间门缝(command elev 0-5)(setq p2(polar p1(/pi 2)(*0.6 mh)p3(polar p2 0(-(/mw 4)(/mck 2)(command pline p3 w 1 1;绘制门上装饰结构(setq p4(polar p3(/pi 2)mck)(setq p4(polar p4 0 mck)(polar p3 0 mck)c)(setq p3(polar p2

34、pi(-(/mw 4)(/mck 2)(command pline p3 w 1 1(setq p4(polar p3(/pi 2)mck)(setq p4(polar p4 pi mck)(polar p3 pi mck)c)(setq p1(list(+(car p)l)0 0)p2(list(+(car p)l)(+0 h)0)p3(list(+(car p)l)0 w),;绘制侧面窗户部分(command ucs 3 p1 p3 p2);第三次UCS p1 p2 p3确定(setq p1(polar(polar p 0(/w 2)(/pi 2)(/h 2)(setq p1(polar

35、p1 0(/ch 2)(command pline p1 w 1 1;绘制窗的边框(setq p2(polar p1(/pi 2)ch)(polar p2 pi ch)(polar p1 pi ch)c)(command pline(setq p3(polar p1 pi(/ch 2)w 0 0;绘制窗的棱边(polar p3(/pi 2)ch)(command pline(setq p3(polar p1(/pi 2)(/ch 2)w 0 0(polar p3 pi ch)(command ucsicon off)(command zoom E)(command hide);消除隐藏实体元素

36、(setvar osmode ss);恢复原来的目标捕捉方式(setvar CECOLOR cc),8.1 常用绘图程序的编制,一 直线圆弧求交程序设计1 几何交切函数(1)求两直线段的交点函数 为了和应用场合中和计算模型相结合,直线常表示形式采用隐式来表示,两条直线的方程为:a1x+b2y+c2=0 a2x+b2y+c2=0 为快速求解,先求出直线和坐标轴的交点,即P1、P2、P3和P4,然后,调用求两直线段交点函数(inters)求出两直线段的交点。对于inters函数,当其参数“方式”的值为Nil时,把两条直线段看作为无限延长的直线,所求的交点可在指定的直线段端点之外。若参数“方式”的值

37、为True时,所求的交点为指定的两线段的交点,交点必须在指定的直线段内,否则返回值为空值(Nil)。,入口参数:a1 b1 c1:直线1方程的系数;a2 b2 c2:直线1方程的系数返回值:相交时返回一个表,表中只有一个交点;若两直线平行不相交时,返回nil。(defun llp(a1 b1 c1 a2 b2 c2/p1 p2 p3 p4 p)(if(and(/=a1 a2)(/=b1 b2)(progn(setq p1(list 0(-0(/c1 b1)p2(list(-0(/c1 a1)0)p3(list 0(-0(/c2 b2)p4(list(-0(/c2 a2)0)p(inters p

38、1 p2 p3 p4 Nil)(prompt n两直线平行或重合!),),(2)求直线与圆的交点函数plc(p1 p2 pc r)直线采用两点(P1、P2)的形式给出,圆的方程:(x-xc)2+(y-yc)2=R2用代数方法解比较繁琐,下面简介几何求解算法。求圆心到直线的距离d;判断直线和圆交点,交点存在的条件:dr;求直线的方向角a;用polar函数构造过Pc和直线垂直的直线PcE;利用inters函数求两直线PcE和P1P2的交点E;用polar函数可直接求出Q1、Q2。,入口参数:p1 p2 直线上的两个点;pc r 圆心、圆半径返回值:相交时返回一个表,表中有两个交点,交点按其在圆上的

39、位置排队,即圆心与第一交点连线的夹角小于圆心与第二交点连线的夹角,相切时表中只有一个交点,不相交时返回nil。(defun plc(pt1 pt2 pc r/d p1 p2 ptt alf e)(setq d(dpl pc pt1 pt2)(if(angle pc p1)(angle pc p2)(list p2 p1)(angle pc p1)(angle pc p2)(list p1 p2)(=(angle pc p1)(angle pc p2)(list p1)(prompt n直线和圆没有交点!)(defun dpl(pt p1 p2);求圆心到直线的距离(distance pt(in

40、ters p1 p2 pt(polar pt(+(angle p1 p2)1.5708)5)nil),(3)求两圆的交点函数pcc(pc1 r1 pc2 r2)设两圆的方程:用代数方法解两个联立的二元二次方程,即可得到两圆的交点,下面简介几何求解算法。计算两圆的圆心距d和圆心连线的方向角a 判断两圆交点存在的条件:(r1-r2)d(r1+r2)在P1P2Q1中,求Q1P1P2的角度 设通过P1和X平行的直线L,该直线和圆1的交点Q1:Q1=(x1+R1,y1)交点Q1和Q2可由直线L绕O1旋转(+)、(-)得到。,入口参数:pc1 pc2 分别为两个圆的圆心点表 r1 r2 分别为两个圆的半径

41、返回值:相交时返回一个表,表中有两个交点,交点按其在第一个圆上的位置排队,即圆心与第一交点连线的夹角小于圆心与第二交点连线的夹角,相切时表中只有一个交点,不相交时返回nil。(defun pcc(pc1 r1 pc2 r2/cbt sbt d p1 p2)(setq d(distance pc1 pc2)r1(abs r1)r2(abs r2)(if(and(=(+r1 r2)d)(angle pc1 p1)(angle pc1 p2)(list p2 p1)(angle pc1 p1)(angle pc1 p2)(list p1 p2)(=(angle pc1 p1)(angle pc1 p

42、2)(list p1)(prompt n两圆没有交点!),2 应用实例 对于三原色(红、绿、蓝)其区域是本原色圆和其它两原色圆的差集,从图中可以看出该圆的圆心可作为内部填充点;而三种补色(黄、品红、青)的填充区域却是其两原色圆的交集与另一原色圆的差集形成的,以黄色为例,其内部填充点为Prg,该点是两圆心的连线PrPg和两圆周的交点连线P1P2的交点;最后的混合色(白色)的填充区域为三原色圆的交集,内部填充点位于三圆心组成的三角形(PrPgPb)的中心Pc处。,(defun C:lyxt(/ss cc p p1 p2p3 p4 p5 p6 pr pg pb r l);定义函数名称、形参和局部变量

43、(setq ss(getvar osmode)(setq cc(getvar CECOLOR)(setvar osmode 0)(setq r 150 l 200 mw 80 mh 150 mck 10 ch 100)(setq pr(getpoint n红色圆圆心点:);获取红色圆之圆心(command circle pr r);绘制三基色圆(command circle(setq pg(polar pr 0 l)r)(command circle(setq pb(polar pr(dtr 300)l)r)(command color 1);填充红色圆(command bhatch P SO

44、LID pr)(command color 3);填充绿色圆(command bhatch P SOLID pg)(command color 5);填充蓝色圆(command bhatch P SOLID pb)(setq p(pcc pr r pg r)p1(car p)p2(cadr p);求红绿圆周交点P1和P2(setq p(pcc pb r pg r)p3(car p)p4(cadr p);求蓝绿圆周交点P3和P4(setq p(pcc pr r pb r)p5(car p)p6(cadr p);求红蓝圆周交点P5和P6,(setq p(inters p1 p2 pr pg);求黄

45、色填充点Prg(command color 2);填充黄色区域(command bhatch P SOLID p)(setq p(inters p3 p4 pb pg);求黄色填充点Pgb(command color 4);填充青色区域(command bhatch P SOLID p)(setq p(inters p5 p6 pr pb);求黄色填充点Prb(command color 6);填充品红色区域(command bhatch P SOLID p)(setq p(inters p5 p6 p1 p2);求白色填充点Pc(command color 7);填充白色区域(command

46、 bhatch P SOLID p)(setvar osmode ss);恢复原来的目标捕捉方式(setvar CECOLOR cc),;求两个圆周的交点,返回为交点的点集:(p1 p2)(defun pcc(pc1 r1 pc2 r2/d cbet)(setq d(distance pc1 pc2)r1(abs r1)r2(abs r2)(if(and(=(+r1 r2)d)(=(abs(-r1 r2)d)(progn(setq cbet(/(-(+(*d d)(*r1 r1)(*r2 r2)(*2 d r1)(setq sbet(sqrt(-1(*cbet cbet)(setq cbet(

47、atan sbet cbet)(setq sbet(angle pc1 pc2)(list(polar pc1(+sbet cbet)r1)(polar pc1(-sbet cbet)r1),二 编制曲线绘制程序 在工程设计中经常绘制各种曲线和曲面,曲线分为规则曲线和不规则曲线。规则曲线有圆锥曲线、渐开线、螺旋线等,这些曲线都可以用函数或参数方程表示;不规则曲线则是根据给定的离散数据点用曲线模型通过逼近、插值等拟合方式形成的,常见的有参数样条曲线、B样条曲线、Bezier曲线等,这些曲线采用分段的参数方程表示。1 规则曲线的绘制 规则曲线都可以用函数或参数方程表示,实际上,绘图过程是一个计算、

48、连线的过程,曲线的精度取决于自变量的增值量和函数自身的数学特性,该曲线的绘制方法主要采用计算模拟法进行。计算模拟法就是先设立坐标系,把自变量的变化区划分为若干个微小的区段,利用曲线函数计算出曲线在该区段的起点、终点坐标,并在中间插补中间点,采用边计算便连线,直到变化区域的终点。,下面以正弦曲线为例介绍规则曲线的绘制方法。设曲线的方程为:y=sin(x)。如果设定自变量的区域为的整倍数,即可按周期绘制正弦曲线。弧度为自变量,区间为0,2,由于弧度的值在0,2区间内增量相同,故可以采用递进增量形式:xi+1=xi+x yi+1=yi+sin(x),(defun C:SINCURV(/pt pt1

49、pt2 a1 a i bm cc p oo)(setq cc(getvar cmdecho)bm(getvar blipmode)bz(getvar OSMODE)bc(getvar CECOLOR);获取系统变量(setvar cmdecho 0);设置新系统变量(setvar blipmode 0)(setvar CECOLOR BYLAYER)(command style standard 宋体 0 1 0);设置新字体变量(setq pt1(getpoint n请确定坐标系的原点:);获得坐标系原点(setvar OSMODE 0)(setq pt pt1 oo pt1 p()pjd(

50、)i 0)(while(=i 360);循环计算绘制曲线(dtr i)(setq pt2(list(+(car pt)i)(+(cadr pt)(*(sin ang)100)(command line pt1 pt2)(setq pt1 pt2 p(append p(list pt2)pjd(append pjd(list i)(setq i(+i 10)(command zoom w(getvar extmin)(getvar extmax)(command pedit l y j c(getvar extmin)(getvar extmax)s),(setvar CECOLOR red)(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号