




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章 工程图的二次开发基础,CAD二次开发技术及其工程应用,多媒体课件,本章内容:,8.1 绘图环境的设定 8.2 程序化绘图过程 8.3 常用绘图程序的编制 8.4 可视化图库建立方法,8.1 绘图环境的设定,一 图纸初始化设置 1 绘图单位设置 (1)系统的绘图单位:长度、角度和基准角度方向。 长度单位的默认值为小数制形式, 角度单位的默认值为十进制数形式, 默认值:零度方向是东,X轴正向,正增量取逆时针方向。 (2)绘图单位的设定,可采用两种形式 用命令UNTIS,调用“图形单位”对话框; 通过LISP编程实现绘图单位的设置。最简单的形式使用 command函数来实现。,2 系统变量的设置 系统存储操作系统的变量有398个,每一个系统变量都有一种数据类型,如整型、实型、字符串型、实体型等; 根据其值读写特性可分为只读性和读写性; 系统允许用户根据需要自己定义系统变量。 可根据需要,可以重新设置AutoCAD系统的有关变量值。 在lisp语言中改变系统变量的方法有两种, (1)利用command函数调用系统命令来实现; (2)利用setvar函数直接设定系统变量的值。,在程序设计时处理的方式有以下三种: (1) 把需要变更值变量(如OSMODE等)的原始值保存。 (setq oss (getvar “OSMODE”) (setq oll (getvar “CLAYER”) (setq occ (getvar “CECOLOR”) (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) ;置当前角度单位为弧度,3 图纸幅面选定 根据国家的相关标准,图纸的幅面分为五种幅面形式。 图幅是图纸的大小规格,图框是提供绘图范围的边界线。,图纸幅面及图框尺寸,4 绘图比例 绘图比例是图形与其实物相应要素的线性尺寸之比; 在绘图时,应从国标规定中选取适当的绘图比例; 由于绘图比例对图形实体度量、定位有重要影响,甚至对其它图形要素产生影响,在二次开发的过程中,通常把绘图比例作为自定义系统变量,并采用保存在图形文件中。,绘图比例表,二 图纸初始化程序设计,初始化程序设计需确定图幅大小,绘图比例和标题栏式样等。 根据输入的数据分为两类: (1)确定图纸的结构参数 (2)标题栏中填写的数据 而这些需要通过对话框的形式提请用户输入或选定。,初始化设置对话框参考格式,N,初始化设置程序流程图,三 图层和比例设定,1 图层、颜色和线型 在绘制图形时,充分利用图层工具,把具有相同图形特征的图形分别设置在不同的图层上,并其进行属性设定。 在对图形进行图层设定时,应考虑以下几个问题: (1)既可方便图形的绘制,又便于管理和编辑图形。 (2)划分图层时,注意将颜色、线型等统一筹划。 (3)便于观察和过滤,提高图形的处理速度。,2 标记字样设置 根据图样要求规定,绘制图样时,应首先进行系统的环境设置,当绘图模块需要书写字体时,再选用相应的字体式样。,四 LISP程序的自动装入,1.程序的自动装入 AutoCAD系统每次启动时,将两个文件自动装入: ACAD.LSP; 系统主菜单同名,扩展名为“.mnl”的文件 AutoCAD系统搜索库路径是按照下列顺序进行: 当前目录 包含当前绘图文件的目录 ACAD环境变量所指定的目录 包含AutoCAD程序文件的目录,2.程序的自动执行 在AutoCAD系统启动的过程中,不仅有程序的自动装入,同时也有函数的自动执行。当系统启动时,就会在内存中自动寻找一个特殊函数“S:STARTUP”,如果找到该函数,就会自动执行该函数。 用户定义的函数“S:STARTUP”一般放在ACAD.LSP或*.mnl文件中,这样就保证函数在AutoCAD系统启动时,自动被执行。当然“S:STARTUP”也可以在许多地方定义,不管函数在什么地方定义,但总是遵循一个原则,即后面的定义覆盖前面的定义。,1 用CAD系统命令绘制图形过程 从右图图形的结构可以看出,图形的绘制过程分为三部分: (1)绘制矩形 (2)绘制对角线 (3)绘制圆,8.2 程序化绘图过程,一 程序化平面绘图命令,为了实现绘图过程的程序化,必须首先熟悉绘图命令的执行过程,在编写绘图程序时使用比较多的lisp函数是command函数,该函数的表数据是CAD系统有关该绘图命令的操作过程。,(1) 绘制矩形 命令: RECTANG 指定第一个角点或倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W): (用鼠标拾取P1点) 指定另一个角点或 尺寸(D): (用鼠标拾取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)/放弃(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 指定圆弧的端点或角度(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先选取矩形左下和右上角点坐标“) ;屏幕提示用户操作信息 (setq p1 (getpoint “n左下点:“) ;输入矩形左下角点坐标 p3 (getpoint“n右上点“) ;输入矩形右上角点坐标 (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 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“ “ ;在指定位置书写字符 “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“) ;保存系统变量“OSMODE“的值 (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:“) “) (setq 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 “ (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 “trim“ eb “ (entsel “选择P1P2下边的圆弧:“) “) ;裁剪P1P2下边圆弧 (setvar “osmode“ ss) ;恢复原来的目标捕捉方式 (setvar “CECOLOR“ cc),二 程序化三维绘图命令 在AutoCAD系统中,绘制三维图形可以通过两种方式实现,一种是直接输入三维实体的控制尺寸,由AutoCAD系统的相关函数自动生成;另一种是先产生二维图形,然后,通过旋转或拉伸等方式再生成三维图形。 在绘制三维图形的过程中,为了准确完整地表达三维实体的立体形状,经常从不同的方向观察实体。由于世界坐标系是唯一的、固定不变的,所以,通过不断的建立用户坐标系,实现用户观察点的变化,以达到不同的表达效果。建立用户坐标系,在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() (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 指定视点或 旋转(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 组合实体的绘制 绘制组合实体图形,首先要进行形体分解,把实体分成若干部分,然后分别进行绘制。从右图中可以看出,该实体构造分为主体部分和附属结构两部分。在绘制实体图形时,要注意用户坐标系(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 命令: VPOINT 当前视图方向: 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-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 指定新原点 :(鼠标拾取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 指定新的默认厚度 : 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 指定端点宽度 : 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)/宽度(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所示) 命令: 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 指定端点宽度 : 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 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 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 (entlast) (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 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 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 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“) ;消除隐藏实体元素 (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时,把两条直线段看作为无限延长的直线,所求的交点可在指定的直线段端点之外。若参数“方式”的值为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 p1 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 圆心、圆半径 返回值: 相交时返回一个表,表中有两个交点,交点按其在圆上的位置排队,即圆心与第一交点连线的夹角小于圆心与第二交点连线的夹角,相切时表中只有一个交点,不相交时返回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 (inters 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 分别为两个圆的半径 返回值: 相交时返回一个表,表中有两个交点,交点按其在第一个圆上的位置排队,即圆心与第一交点连线的夹角小于圆心与第二交点连线的夹角,相切时表中只有一个交点,不相交时返回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 p2)(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) ;定义函数名称、形参和局部变量 (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“ “SOLID“ 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) ;求黄色填充点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 “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 (atan sbet cbet) (setq sbet (angle pc1 pc2) (list (polar pc1 (+ sbet cbet) r1) (polar pc1 (- sbet cbet) r1) ),二 编制曲线绘制程序 在工程设计中经常绘制各种曲线和曲面,曲线分为规则曲线和不规则曲线。规则曲线有圆锥曲线、渐开线、螺旋线等,这些曲线都可以用函数或参数方程表示;不规则曲线则是根据给定的离散数据点用曲线模型通过逼近、插值等拟合方式形成的,常见的有参数样条曲线、B样条曲线、Bezier曲线等,这些曲线采用分段的参数方程表示。 1 规则曲线的绘制 规则曲线都可以用函数或参数方程表示,实际上,绘图过程是一个计算、连线的过程,曲线的精度取决于自变量的增值量和函数自身的数学特性,该曲线的绘制方法主要采用计算模拟法进行。计算模拟法就是先设立坐标系,把自变量的变化区划分为若干个微小的区段,利用曲线函数计算出曲线在该区段的起点、终点坐标,并在中间插补中间点,采用边计算便连线,直到变化区域的终点。,下面以正弦曲线为例介绍规则曲线的绘制方法。 设曲线的方程为: y=sin(x)。 如果设定自变量的区域为的整倍数,即可按周期绘制正弦曲线。弧度为自变量,区间为0,2,由于弧度的值在0,2区间内增量相同,故可以采用递进增量形式: xi+1=xi+x yi+1=yi+sin(x),(defun C:SINCURV( / pt pt1 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 () 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“) (setq n (length p) i 0 py (cadr pt) (while ( (nth i pjd) 180) (command “text“ “j“ “bc“ pp 4 0 zf “) (command “text“ “j“ “tc“ pp 4 0 zf “) (setq i (+ i 1) ) (setq i 1 ym (cadr (nth 0 p) yn ym) (while ( (cadr (nth i p) ym) (setq ym (cadr (nth i p) y1 (nth i p) (if ( (ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 猎聘网络面试题库及答案
- 农业产业扶贫项目实施中2025年社会稳定风险评估及对策研究报告
- 快递员的面试题库及答案
- 安全教育培训费用明细表课件
- 安全教育培训评分课件
- 新能源并购重组2025年知识产权评估标准与案例解析
- 安全教育培训计划措施课件
- 新能源企业绿色信贷2025年研发投入风险与机遇分析报告
- 安全教育培训经费与课件
- 2025年城市垃圾分类与填埋气发电技术创新研究报告
- 孕产妇配偶艾滋病、梅毒检测服务流程
- IPV6组网技术 教案1 了解IPv6技术发展历史
- 家居时代欧派家居的营销策略优化探讨
- PS6000自动化系统用户操作手册(一)
- 和田县有机蔬果储藏冷库项目可行性报告赛孜古尔
- 高三生物一轮复习课件病毒 微专题
- 畲族民俗文化课件
- GA/T 2187-2024法庭科学整体分离痕迹检验规范
- 急性脑梗死静脉溶栓护理查房
- 乡村医生药品管理培训
- 医院培训课件:《危重病人心电监测》
评论
0/150
提交评论