APP下载

采用Autolisp语言生成平面与圆锥截交线的二次开发

2019-10-23张晓彬

漳州职业技术学院学报 2019年2期
关键词:交线视图绘图

张晓彬

(漳州职业技术学院 机械工程系,福建 漳州 363000)

AutoCAD 作为通用绘图软件,广泛应用于机械、建筑、电气等领域。 但是,在专业性较高的专门应用领域的适用性较差。 为了提高绘图效率,可以借助二次开发来扩展绘图功能并提高绘图效率。 Autolisp 语言内嵌于AutoCAD 软件,可以和AutoCAD 软件的绘图软件命令有机结合,能够有效地提高AutoCAD 软件的智能化和适用性[1]。

1 平面与圆锥截交线的常规画法

平面与立体产生的交线称为截交线。 根据平面与圆锥轴线之间的相对位置不同,可产生5 种不同类型的截交线。 其中,当截平面平行于一条素线时,截交线的形状为抛物线;当截平面平行于轴线时,截交线的形状为双曲线。

在AutoCAD 绘图中,表1 中的前3 种类型可以借助软件内置命令直接进行精确绘制。 对于后面2种类型,需要绘制二次圆锥曲线,无法通过软件内置命令直接完成。 需要借助纬圆法(或素线法),求出若干个特殊点和一般位置点,再利用样条曲线命令进行拟合完成具体如图1 所示。

表1 平面与圆锥截交线类型

图1 利用纬圆法求截交线

2 利用Autolisp程序快速生成方法

通过纬圆法(或素线法)绘制截交线,需要重复做出不同位置的纬圆,并根据投影规律求出截交线上的点的侧面投影,效率低下,且无法重新利用[2-3]。 基于纬圆法的思想,本文提出一种使用Autolisp 绘制截交线的算法,实现可以重复运行的功能,进而达到提高绘图效率的目的。

根据给定的三视图进行特征点识别,主视图的三个特征点分别标识为P1、P2、P3;左视图的3 个特征点分别标识为P4、P5、P6,截平面在主视图所积聚的直线端点分别标识为P7、P8;俯视图的特征点(圆心)标识为 P9。

2.1 截交线为抛物线的绘制方法

基于纬圆法,绘制截交线为抛物线的三视图的算法描述如下。

步骤1:根据P7、P8与P1、P2,判断截平面直线是否与素线平行,如果是,执行步骤2。

步骤2:根据 P7、P3、P8,使用 pline 命令,重新绘制得到新的主视图。

步骤3:利用car 函数求出P1和P7的X 轴坐标值,相减得到的绝对值为dis1,并利用勾股定理求出 dis2。 两次利用 polar 函数求出 P10、P11。 根据 P9、P10、P11分别绘制出俯视图的圆弧和直线。

步骤4:利用polar 和inters 函数求出P1所在铅垂线与直线的交点 P32,再利用 car、cadr、list 函数求出的中点P33。根据P33,利用polar、inters 函数求出distance 函数求出P33所在纬圆与的交点,并求出纬圆的半径radius。

步骤5:利用 car 函数,根据 P1、P33的 X 轴坐标求出 dis3。 根据 radius 和 dis3,利用勾股定理求出 dis4。根据 P9、dis3、dis4,两次利用 polar 函数求出 P12、P13。 根据步骤 4-5 的方法,分别求出 P14、P15、P16、P17。

步骤6:根据 list、car、cadr 函数求出 P8的 X 坐标、P9的 Y 坐标,得到 P18。

步骤7:利用 spline 命令,顺次连接 P10、P12、P14、P16、P18、P17、P15、P13、P11,最终得到截交线在水平面的投影,并到新的俯视图。

步骤8:利用polar 函数和inters 函数,计算得到直线与P4所在铅垂线的交点P38。

步骤9:利用 polar 函数,根据P38及dis2,求出 P10和 P11在左视图的坐标。

步骤10:利用 polar 函数,根据 P38及 dis4,求出 P12。 利用 car 函数获得 P12的 X 轴坐标,cadr 函数获得P27的Y 轴坐标。根据获得的X 轴坐标、Y 轴坐标、Z=0.0,用list 函数构造出P12在左视图的坐标。用相同的方法,求出P13的坐标。

步骤11:利用步骤 3 的方法,分别求出 P14、P15、P16、P17、P18。

步骤12:利用 spline 命令,顺次连接 P10、P12、P14、P16、P18、P17、P15、P13、P11,绘制出截交线在侧面的投影。

步骤13:进行修剪,并用erase 命令删除求图形,最终得到完成的图形。

2.2 截交线为双曲线的绘制方法

基于纬圆法,绘制截交线为双曲线的三视图的算法描述如下。

步骤1:根据P7、P8判断截交线直线是否为轴线平行。 是,执行步骤2。

步骤2:根据 P7、P8、P3、P1,使用 pline 命令绘制主视图。

步骤3:利用car 函数,分别P1P7的X 轴坐标,相减得到的绝对值为dis1。 根据勾股定理,计算出dis2。

步骤4:根据 P9、dis,利用 polar 函数,求出辅助点 P31。 再根据辅助点 P31、dis2,利用 polar 函数,分别求出 P10和 P11。

步骤5:以 P9(圆心)、P10、P11为参数,使用 arc 命令绘制出圆弧;以 P10、P11为端点,绘制出直线,从而绘制出完整的俯视图。

步骤 7:根据 polar、inters 函数,计算出直线的中点 P34,根据 dis2,计算出 P10、P11。

步骤8:根据P33,polar 函数和inters 函数,计算出 P33所在纬圆与素线交点的 P12、P13。 根据P12、P13,利用distance 函数计算出纬圆的半径radius。 根据勾股定理,计算出dis3。

步骤9:利用car 函数获得 P4的 X 轴坐标,cadr 函数获得P33的 Y 轴坐标。根据获得的 X 轴坐标、Y轴坐标、Z=0.0,用list 函数构造出P33在左视图的坐标。

步骤10:根据P33、dis2,利用polar 函数,分别计算出P12、P13在左视图的投影坐标。根据相同方法分别计算出 P14、P15、P16、P17。

步骤11:利用car 函数获得P4的X 轴坐标,cadr 函数获得P7的Y 轴坐标。 根据获得的X 轴坐标、Y 轴坐标、Z=0.0,用 list 函数构造出 P18的坐标。

步骤 12:利用 spline 命令,顺次连接 P10、P12、P14、P16、P18、P17、P15、P13、P11,绘制出截交线在侧面的投影。

3 程序实现的关键技术

根据上述提出的算法,用Autolisp 语言编写实现绘图的程序,部分代码如下。

3.1 平面平行于素线的情况

(if (or (< (abs (- (angle pt7 pt8) (angle pt1 pt2))) 0.000001) (< (abs (- (abs (- (angle pt7 pt8) (angle pt1 pt2))) pi)) 0.000001))//判断平面是否与直线平行

(setq dis1 (- (car pt1) (car pt7)))

(setq dis2 (sqrt (- (* radius radius) (* dis1 dis1))))

(setq pt31 (polar pt9 pi dis1))

(setq pt10 (polar pt31 (* 0.5 pi) dis2))

(setq pt11 (polar pt31 (* 1.5 pi) dis2))

…………

(setq pt32 (polar pt1 (* 1.5 pi) 10))

(setq pt32 (inters pt1 pt32 pt7 pt8 nil))

(setq pt33 (list (* 0.5 (+ (car pt32) (car pt7))) (* 0.5 (+ (cadr pt32) (cadr pt7))) 0.0))

(setq pt34 (polar pt33 0 10))

(setq pt35 (inters pt33 pt34 pt1 pt2 nil))

(setq pt36 (inters pt33 pt34 pt1 pt3 nil))

(setq radius (* 0.5 (distance pt35 pt36)))

(setq dis3 (- (car pt1) (car pt33)))

(setq dis4 (sqrt (- (* radius radius) (* dis3 dis3))))

(setq pt37 (polar pt9 pi dis3))

(setq pt12 (polar pt37 (* 0.5 pi) dis4))//获得P12 在俯视图的坐标

(setq pt13 (polar pt37 (* 1.5 pi) dis4))//获得P13 在俯视图的坐标

…………

(command "spline" pt10 pt12 pt14 pt16 pt18 pt17 pt15 pt13 pt11 "" "" "")//根据获得的关键点绘制截交线

(setq pt38 (polar pt4 (* 1.5 pi) 10))

(setq pt38 (inters pt4 pt38 pt5 pt6 nil))

(setq pt10 (polar pt38 pi dis2))//获得P10 在左视图的坐标

(setq pt11 (polar pt38 0 dis2)))//获得P11 在左视图的坐标

(setq pt12 (polar pt38 pi dis4)))

(setq pt12 (list (car pt12) (cadr pt33) 0.0))//获得P12 在左视图的坐标

(setq pt13 (polar pt38 0 dis4))

(setq pt13 (list (car pt13) (cadr pt33) 0.0))//获得P13 在左视图的坐标

(setq pt18 (list (car pt4) (cadr pt8) 0.0))//获得P18 在左视图的坐标

…………

(command "spline"pt10 pt12 pt14 pt16 pt18 pt17 pt15 pt13 pt11 "" "" "")//根据获得的关键点绘制截交线

3.2 平面平行于轴线的情况

(if(or (= (angle pt7 pt8) (* 0.5 pi)) (= (angle pt7 pt8) (* 1.5 pi))//判断平面与轴线是否平行

…………

(setq pt31 (polar pt7 (* 1.5 pi) (* 0.25 dis3)))

(setq pt32 (polar pt7 (* 1.5 pi) (* 0.5 dis3)))

(setq pt33 (polar pt7 (* 1.5 pi) (* 0.75 dis3)))

(setq pt34 (polar pt4 (* 1.5 pi) 10))

(setq pt34 (inters pt4 pt34 pt5 pt6 nil))

(setq pt10 (polar pt34 pi dis2))//获得P10 在左视图的坐标

(setq pt11 (polar pt34 0 dis2))//获得P11 在左视图的坐标

(setq pt35 (polar pt33 0 10))

(setq pt12 (inters pt33 pt35 pt1 pt2 nil))

(setq pt13 (inters pt33 pt35 pt1 pt3 nil))

(setq radius (* 0.5 (distance pt12 pt13)))

(setq dis3 (sqrt (- (* radius radius) (* dis1 dis1))))

(setq pt33 (list (car pt4) (cadr pt28) 0.0))

(setq pt12 (polar pt33 pi dis3))//获得P12 在左视图的坐标

(setq pt13 (polar pt33 0 dis3))//获得P13 在左视图的坐标

4 应用举例

已知三视图,利用该程序分别求出2 种不同情况的截交线,生成效果如图2 所示。

图2 生成效果图

5 结语

手工绘图、AutoCAD 辅助作图的方法都需要重复多次运用纬圆法,确定截交线上的特殊点,再对所得到的特殊点进行拟合,效率比较低下。基于纬圆法的思想,利用Autolisp 语言,快速确定特殊点,并利用AutoCAD 内置的spline 命令直接生成所需的二次圆锥曲线,有效地提高了AutoCAD 的智能化和适用性。

猜你喜欢

交线视图绘图
来自河流的你
“禾下乘凉图”绘图人
球面与简单多面体表面交线问题探究
培养数学空间想象力
两曲面交线上第二型曲线积分的计算
垂涎三尺
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
Django 框架中通用类视图的用法