标题 | 基于Lisp语言的cad二次开发在U型渡槽截面设计中的应用 |
范文 | 许婧 刘飞鹏 李继国 摘要:目前,CAD在设计工作中占有举足轻重的地位,而Lisp程序语言是CAD技术的重要拓展;结构设计、强度校核时,需要计算构件的截面惯性矩或截面模量等一系列的特性参数,该文用lisp语言编程,并将编程结果应用于U型渡槽截面特性的计算;结果表明,lisp语言能够高效准确的计算出截面的特性参数,一定程度上能实现计算机的自动设计、计算、制图功能。 关键词:lisp语言;结构设计; CAD二次开发;U型渡槽截面设计 中图分类号:TP319? ? ? ? 文献标识码:A 文章编号:1009-3044(2019)23-0275-02 开放科学(资源服务)标识码(OSID): 在结构设计、强度校核中常常需要计算构件的截面惯性矩或截面模量。我们知道截面模量与惯性矩的关系为w=[IY],得出惯性矩就很容易求得截面模量[1]。对于不规则几何形状的截面需用惯性矩的定义,即积分Ix=?y2dx. Iy= ?x2dy来计算,计算相当复杂。即使对于由型材或规则截面组成的组合截面也需要先求得每个截面对形心轴的惯性矩,然后用平行移轴公式Ix=Ix0+a2A、Iy= Iy0+b2A(其中Ix0、Iy0是截面对形心轴系的二次矩,A是截面面积,a、b分别是形心轴与所求轴系的距离)来计算,其涉及的计算相当烦琐。 LISP(List Processor)程序语言[1]是由Autodesk公司开发的。AutoCAD软件中包含大多数用于产生图形、处理图形的命令,但仍有某些命令末被提供[2]。使用Auto LISP程序语言可以编制能够在图形文本对象内编写工具或作全局选择性改变的程序。 结构设计的计算占有很重要的比重,计算结果的准确度直接决定了结构设计的安全。计算机辅助设计(Computer Aid Desin简写CAD,常称AutCAD是20世纪80年代初发展起来的一门新兴技术型应用软件,如今在各个领域均得到了普遍的应用[3]。而基于AutoCAD用Auto lisp语言编制出的程序能够实现自动设计计算,从而大大减少计算的工作量。以下通过编写“截面特性计算”的LISP程序工具来说明程序在结构设计中的应用[4]。 1 Lisp程序 1.1程序语言 lisp程序编制过程中用到的主要计算程序语言具体如下: (defun mas (obj / Area Area1 Area2 Perimeter Centroid Centroid1 Centroid2 MomentOfInertia MomentOfInertia1 PrincipalDirections PrincipalMoments minpt maxpt Sx Sy ProductOfInertia ProductOfInertia1 RadiiOfGyration Wx1 Wx2 Wy1 Wy2 obj1 obj2 recPt1 recPt2 reg1 reg2 CenX CenY) (if (= "AcDbRegion" (vla-get-objectname obj)) ;如果是截面则计算 (progn(setq Area (vla-get-area obj);面积 Perimeter (vla-get-Perimeter obj);周长 Centroid (V2L (vla-get-Centroid obj));质心 MomentOfInertia (V2L (vla-get-MomentOfInertia obj));惯性矩 PrincipalDirections (V2L (vla-get-PrincipalDirections obj));主矩方向 PrincipalMoments (V2L (vla-get-PrincipalMoments obj));主力矩与质心的X-Y方向 ProductOfInertia (vla-get-ProductOfInertia obj);惯性积) ; setq (vla-move obj (vlax-3d-point Centroid) (vlax-3d-point '(0 0)));移动质心到原点 (setq MomentOfInertia1 (V2L (vla-get-MomentOfInertia obj));质心的惯性矩 ProductOfInertia1 (vla-get-ProductOfInertia obj);质心的惯性积 RadiiOfGyration (V2L (vla-get-RadiiOfGyration obj));回旋半径 );setq (vla-getboundingbox obj 'minpt 'maxpt);边界框 (setq minpt (vlax-safearray->list minpt);左下角點 maxpt (vlax-safearray->list maxpt);右上角点 Wx1 (/ (car MomentOfInertia1) (cadr minpt));抵抗矩 Wx2 (/ (car MomentOfInertia1) (cadr maxpt)) Wy1 (/ (cadr MomentOfInertia1) (car minpt)) Wy2 (/ (cadr MomentOfInertia1) (car maxpt))); setq (vla-move obj (vlax-3d-point '(0 0)) (vlax-3d-point Centroid));移回原来位置 (setq obj1 (vla-copy obj);拷贝物体以用来算X面积矩 obj2 (vla-copy obj);拷贝物体以用来算Y面积矩 CenX (car Centroid) CenY (cadr Centroid) recPt1 (list (+ CenX (car minpt) -1) CenY;建立两个矩形面域的点表 (+ CenX (car maxpt) +1) CenY (+ CenX (car maxpt) +1) (+ CenY (cadr minpt) -1) (+ CenX (car minpt) -1) (+ CenY (cadr minpt) -1)) recPt2 (list (+ CenX (car minpt) -1) (+ CenY (cadr minpt) -1) (+ CenX (car minpt) -1) (+ CenY (cadr maxpt) +1) CenX (+ CenY (cadr maxpt) +1) CenX (+ CenY (cadr minpt) -1)) reg1 (draw-rectange recPt1);创建面域1 reg2 (draw-rectange recPt2);创建面域2) (vla-boolean obj1 acSubtraction reg1);求obj1与面域1之差 (vla-boolean obj2 acSubtraction reg2);求obj2与面域2之差 (setq Area1 (vla-get-area obj1);求obj1的面积 Area2 (vla-get-area obj2);求obj2的面积 Centroid1 (V2L (vla-get-Centroid obj1)) ;求obj1的质心 Centroid2 (V2L (vla-get-Centroid obj2));求obj2的质心 Sx (* Area1 (- (cadr Centroid1) (cadr Centroid)));绕X轴面积矩(静矩) Sy (* Area2 (- (car? Centroid2) (car? Centroid)));绕Y轴面积矩(静矩)) (vla-delete obj1);删除面域1 (vla-delete obj2);删除面域2 (list (cons "面积" Area);返回各种参数值 ;(cons "周长" Perimeter) (cons "质心" Centroid) ;(cons "X 轴主惯性矩" (car PrincipalMoments)) (cons "X 轴惯性矩? " (car MomentOfInertia1)) ;(cons "Y 轴主惯性矩" (cadr PrincipalMoments)) (cons "Y 轴惯性矩? " (cadr MomentOfInertia1)) ;(cons "XY惯性积? ? " ProductOfInertia1) (cons "X 轴上抗弯距" Wx2) (cons "X 轴下抗弯距" Wx1) (cons "Y 轴左抗弯距" Wy1) (cons "Y 轴右抗弯距" Wy2) (cons "X 轴面积矩? " Sx ) (cons "Y 轴面积矩? " Sy ) (cons "回旋半径ix? " (car RadiiOfGyration)) (cons "回旋半径iy? " (cadr RadiiOfGyration)) ;(cons "主矩方向1? ?" (list (car PrincipalDirections) (caddr PrincipalDirections))) ;(cons "主矩方向2? ?" (list (cadr PrincipalDirections) (cadddr PrincipalDirections))) ;(cons "距左边距离? " (abs (car minpt))) ;(cons "距右边距离? " (abs (car maxpt))) ;(cons "距上边距离? " (abs (cadr maxpt))) ;(cons "距下边距离? " (abs (cadr minpt))))))) 2程序运用 现有一个U型渡槽断面如图1所示:在进行结构力学设计计算前,需要求出其截面特性,而对于U型渡槽断面等不规则的形状,若手工计算,则需要建立坐标系用惯性矩的定义来计算,相当复杂。本次在上述lisp二次编程的基础上,在cad中加载lisp程序语言,利用快捷键来求解。具体计算步骤如下: (1)打开CAD,在命令行中键入lisp语言,加载lisp程序。 (2)输入快捷键txx,按命令要求选择U型断面最后成果如图2所示。通过人工复核,该截面的计算结果准确,符合工程设计的精度要求。 3总结 Auto CAD二次开发的中的LISP语言,是人工智能学科领域中广泛采用的一种程序设计符号语言[5],这种语言在参数化设计和绘图中有很大的灵活性,并且可以实现一定的人工智能[6]。LISP开发出的程序可以像运行CAD普通命令一样在命令行中直接键入自己定义的命令运行,保持了用户的绘图习惯并簡化了大量的计算。 水利工程U型渠道的设计,由于其复杂截面的几何性质,对其进行结构设计时,人工计算费工费时,且容易出错。本次基于lisp的二次开发程序计算U型渡槽的截面特性,省时省力且准确度高,为结构设计提供一种新的有效思路。 参考文献: [1] 高建亮. AutoCAD计算截面几何性质的应用[J].建设科技,2011(11). [2] 刘志红. 平面几何性质计算方法研究[J].安阳工学院学报,2011(7). [3] 王丙辉.一种利用Auto Cad计算构件截面惯性矩/模量的简便方法[J].广船科技,2011(12). [4] 石琴,陈朝阳. 任意形状薄壁截面的几何特性参数的计算[J].机械工程学报,2004,40(10):144-148. [5] 宋金虎. 用AutoCAD求材料截面的几何性质[J].门窗,2012(10). [6] 江明明. LISP编程语言在CAD绘图中的应用[J].北京测绘,2016(01):113-115. 【通联编辑:朱宝贵】 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。