LISP 语言在CAD 道路设计中的各种应用
Lisp程序语言的具体实现和运用浅析
![Lisp程序语言的具体实现和运用浅析](https://img.taocdn.com/s3/m/6c78513008a1284ac95043a3.png)
Lisp程序语言的具体实现和运用浅析一、引言:随着工业技术和生活水平的提高,室外管线的种类越来越多,对室外管线设计的要求就越来越高。
室外管网不仅仅需要在平面上按照相关的规范规程进行综合排布,还需要在竖向高度上进行精心安排,才能在有限的空间合理组织各种管线的布置。
而这种需求必然要求设计师拥有比较强大的软件来进行室外管线设计的工作。
然而目前国内许多设计机构在管线综合方面主要靠手工综合,而且竖向标高的碰撞上面基本不进行设计,都是靠施工单位在施工现场根据实际情况自行避让。
这样导致室外管网排布的混乱,既不规范,甚至带来安全隐患等因素。
往往发生拆了又建,建了又拆,很难统筹管理,后期维护困难等问题。
上面的情况一再发生,无论是地方政府还是设计单位、业主等都越来越意识到室外管网合理规划,统一综合设计的重要性和必要性。
而且手工进行综合设计已经难以胜任这样的工作,迫切需要强大的软件进行辅助设计。
目前能进行室外管网综合的软件主要有一些国产软件和AutoDesk公司的Revit系列软件,但是一些国产软件使用繁琐复杂,难以满足设计师的需求,而Revit这样的BIM软件虽然在管线碰撞等方面很有优势,但是对硬件要求高,需要专门培训,使用起来也比较复杂。
因此,开发出真正适合管网综合的程序就显得很有必要。
二、LISP和BIM的简介:LISP(LISt Processor,即列表处理语言),由约翰·麦卡锡在1960年左右创造的一种基于λ演算的函数式编程语言。
可以说Lisp语言抽象复杂却又大道至简,它的主要的特点:1代码量小,2功能全,3易扩展。
AutoLISP是由Autodesk公司开发的一种LISP程序语言,嵌入在AutoCAD 内部,具有智能的特点的编程语言。
通过AutoLISP编程,可以节省工程师很多时间。
AutoLISP程序语言在室外管网综合方面得天独厚的优势。
近几年BIM技术的方兴未艾,室外管网综合的性质决定了它比较适合采用BIM技术。
基于Visual LISP语言的AUTOCAD参数化设计
![基于Visual LISP语言的AUTOCAD参数化设计](https://img.taocdn.com/s3/m/8d0fc4cfb9f3f90f76c61b2c.png)
基于Visual LISP语言的AUTOCAD参数化设计摘要本系统是以模块化设计和参数化设计为指导思想,以Visual LISP为编程语言和开发工具,对AutoCAD软件进行的二次开发。
研制出了界面友好的标准件图库系统和标准图幅调用系统,实现了设置绘图环境的自动化和绘制标准滚动轴承,从而提高绘图的质量和效率。
本文介绍了构建此系统所用到的CAD二次开发的主要方法和关键技术,包括CAD的Visual LISP集成开发技术,Visual BASIC对话框设计,Visual LISP 与VBA的交互式编程技术。
用户通过人机交互界面设置滚动轴承的关键参数,系统自动计算出绘制图块所需要的各点的坐标,调用绘图程序进行绘图;通过标准图幅调用系统,用户可以在交互界面设置所需要的图纸类型,绘图比例,系统将参数传输给调用模型,调用事先绘制好的标准图幅块并设置全局性比例,然后按1:1打印即可完成打印出图。
系统优点:标准图幅库是可编辑的,可以在AutoCAD环境下设置,使其符合企业的特殊要求;滚动轴承参数化模型完全按照国标要求编制,尺寸系列摘自国标不需要用户再查手册,也可以自定义。
关键词:Visual LISP;参数化绘图;二次开发;VBA;交互式编程;标准图幅;标准件库;滚动轴承参数化模型基于VisualLISP语言的AutoCAD参数化设计PARAMETRIC DESIGN AUTOCAD BASEDon Visual LISP LANGUAGEABSTRACTThe system is based on modular design and parametric design as the guiding ideology, as in Visual LISP programming language and development tools for the secondary development of AutoCAD software. Developed a user-friendly standard parts library system and the standard drawing system, which can automatically set the graphics environment and draw the standard rolling bearing, thereby enhancing the quality and efficiency of drawing.This article will describe the main methods and the major key technologies of CAD's secondary development including Visual LISP Integrated Development Technology, Visual BASIC dialog design and Visual LISP and VBA programming interactive. Users only need to enter the key parameters in the human-computer interaction interface, the system will calculate the necessary points coordinates which is needed in drawing and then draw the drawing. Through the drawing system, the user can select the required drawing frame, set the ratio of the drawing in the dialog box, the system automatically draw out the drawing frame and set overall ratio. Then, in accordance with the 1:1 print a drawing to complete the print. System Benefits: Standard Drawing Library is open source, can be set up in the AutoCAD environment, to meet the specific requirements of enterprises; rolling bearing models in full accordance with the requirements of the preparation of GB, GB size range from requiring users to re-check the manual, but also required to custom; procedures for open-source, standard parts library can be filled follow-up.KEYWORDS:Visual LISP;Parametric Drawing;The secondary development;VBA;Standard drawing frame目录1.绪论 (1)1.1课题背景及研究的目的和意义 (1)1.2目前国内外研究进展概述 (2)1.2.1AutoCAD发展趋势 (2)1.2.2CAD二次开发研究热点 (3)1.2.3 本文主要研究内容 (4)2.AUTOCAD二次开发工具 (6)2.1VISUALLISP编程方法 (6)2.1.1VisualLISP语言概要 (6)2.1.2AutoLISP基本函数 (6)2.1.3参数化绘图程序设计技术 (9)2.2VBA编程方法 (10)2.2.1VisualBasic语言概要 (10)2.2.2VBA IDE集成编程环境 (13)2.3VISUALLISP与VBA的交叉编程方法 (14)3.绘图环境的设置 (17)3.1设置图层、文字样式、标注样式 (17)3.1.1创建新图层 (17)3.1.2定义字样 (17)3.1.3 设置尺寸标注 (18)3.2绘制标准图框模板 (20)3.2.1绘制标准图幅 (20)3.2.2设置块属性 (21)3.3VBA制作绘图模板调用窗口及V ISUAL LISP编制调用程序.. 22基于VisualLISP语言的AutoCAD参数化设计3.3.1VBA制作调用窗口 (23)3.3.2Visual LISP编制调用程序 (28)4.VISUALLISP参数化编程 (30)4.1参数化图形的特点及应用 (30)4.2VISUALLISP编制标准滚动轴承参数化模型程序库 (30)4.3VBA编制标准件调用窗口 (34)4.4VBA与VISUALLISP交叉编程应用 (37)5.程序设计综合应用 (39)5.1程序检查和调试中的问题 (39)5.2VBA编程与VISUALLISP编程的数据传递 (40)5.3有关系统变量的应用举例 (42)5.4自定义工具栏应用举例 (43)结论 (46)参考文献 (46)致谢 (47)1.绪论1.1课题背景及研究的目的和意义众所周知,AutoCAD 是目前在Windows95/ 98/ 2000/ NT /XP环境下应用最广泛、使用人数最多的CAD 软件, 以其完善的绘图功能、良好的用户界面、易学易用的特点,受到了广大工程技术人员的普遍欢迎。
基于autoCAD的拓扑算法及其应用——由交通网图自动生成双线道路的LISP程序
![基于autoCAD的拓扑算法及其应用——由交通网图自动生成双线道路的LISP程序](https://img.taocdn.com/s3/m/f093faff227916888586d734.png)
基于autoCAD的拓扑算法及其应用——由交通网图自动生成双线道路的LISP程序基于autoCAD的拓扑算法及其应用——由交通网图自动生成双线道路的LISP程序数较多的情况下.最终改正值收敛缓慢.而且GPS网的协方差对旧网的改正影响较大. 四,整体平差模型将GPS网的重合点视为随机参数与旧网一并平差.在周忠谟教授编着的"GPS卫星测量原理与应用"一书的182页,已介绍在高斯平面坐标系标中联合平差模型,该书中又指出:在两网联合平差中,正确地确定网的方差与协方差的其重要,而实践经验表明,通过GPS观测的平差所获得卫星网方差与协方差,其所代表的精度往往偏高,这将使卫星网和地面网在联合平差中都可能无法正确地发挥作用,从而影响平差结果的可靠性,因此,如何合理地确定卫星网和地面网方差与协方差,是当前两网联合平差中有待进一步研究的问题.五,结语原控制网归算为GPS网的坐标系统,有多种计算方法可供选择,主要需把握好实际计算条件,例如GPS重合点较多的网选用第一,二种的计算方法是正确的,温州市GPS 控制网和温州市原三角网仅重合四点,在统计学角度来看,子样很不充份,所以只能选择第四种方法来计算归化GPS网坐标系统.对GPS网观测值所代表精度偏高问题, 对策措施有三点;1.适当增大GPS网基线测量先验方差来调正权比的合理性,避免精度偏高的趋向.2.采用矩阵法分块求逆与分组平差.3.对于小三角锁和导线网的整体平差是利用目前比较成熟的平差技术. 根据角度和边长观测中误差m?,m的先验值确定角度,边长观测权的初值,记为: P(1)B=1/m;P=1/(A+B?S;×10)进行第一次平差计算后,再计算角度,边长这两类观测值单位权方差的第一次估值蠢.和.再依下式确定第二次平差时权. 2?1aoB'=?p;.'=P;?:反复进行计算直到I塞{为止,式中e为任意小的正数.采用上述措施之后,再计算点位精度,如有超限现象,应该考虑对策是否却当或者再采用新的平差模型试算.基于autoCAD的拓扑算法及其应用——由交通网图自动生成双线道路的LISP程序浙江省测绘局科研所陈少勤摘要:本文介绍一种基于autoCAD图形数据的拓扑算法和LISP程序思路,可以快速地用单线数字化道路中心线.程序通过搜寻交通网络中每个独立的最小多边形.自动生成双线符号的道路图.一15—一,引言autoCAD以其强大的图形编辑功能和快速的版本升级等优越性,赢得了世界上最广泛的CAD用户.它不但为各行各业的 CAD用户提供必要的通用性绘图,编辑功能,还具有充分开放的数据结构和便利的二次开发工具和环境,用户可按自身的实际需要将通用的CAD系统个性化.因此它在电子地图的建立和维护方面的应用开发也非常普遍.在地图数据库中,用空间数据,属性数据以及关系来描述地理物体.空间数据记录物体的位置,形状,大小等几何特征,可完全独立于规定具体表示法的符号系统.如以坐标点表示随机分布的点状地物,以一串坐标表示呈线状分布的地物,以轮廓线坐标表示面状地物.这样更有利于在地理信息系统中建立图形与属性数据的唯一对应关系,,或在机助制图中根据任意选定的符号系统生成图形.空间数据包括物体定位的几何信息和物体之间的结构关系——拓扑关系,在空间数据处理中,后者的意义往往更重于前者.而 autoCAD虽长于几何图形的处理,但不能反映几何实体之间的结构关系.本文将要讨论的问题就是如何以autoCAD 的图形数据为基础,从实体定位关系中间接导出拓扑关系. 二,多边形拓扑关系的建立根据拓扑学的图论原理,一个图的诸元素(结点,链段,面域)之间存在着两类二元关系,即同类元素(如结点与结点,链段与链段)之间的邻接关系,和不同类元素(如结点与链段,链段与面域)之间的关联关系.它确立了在图形连续变化下元素间整体关系保持不变性的本质——拓扑关系. 地图中的网络(交通网,水系,行政区划,面域专题等)相当于图论中的平面图,即一】6一画在一个平面上的任何两条边之间除了端点以外没有其他交点,它的拓扑关系是以多边形为核心建立起来的.多边形由链段组成,链段由结点连接.每个结点可有多个关联的链段,但一个特定结点上的所有链段中,同属于一个多边形的链段只有两条.因此,某特定多边形的任意一条链段必定关联于一个结点,与该结点关联的链段集合中必定存在着该多边形的另条链段,如此连环搜索便可获得构成该多边形的链段集合,每个链段都可按正向或反向连入左右多边形,所有链段均被搜索而连入多边形后,整个网络的多边形也就合部生成.autoCAD中虽然没有显式拓扑数据,但autoCAD中的PLINE(多义线) 的实体数据正如链段一样为一个有序的坐标串.利用autoLISP提供的内部函数可以获取通过同一个点的所有PLINE实体集,访问每个实体名并获取其顶点坐标.因此当用 PLINE画出符合拓扑结构的网络图形后,也就能通过计算的方法生成拓扑关系.具体过程如下: a获取网络图的全部PLINE实体集; b任取一条PLINE作为起始链段; c按正向取得该PLINE的终点(如正向已被用过则按反向取得该PLINE韵起点)作为当前工作结点;d获取通过该结点的PLINE实体集,按左转算法取得转角最大的PLINE为该结点的后继链段,作为当前工作链段;e转向c继续执行,直到当前工作链段与起始链段闭合,结束循环;f转向b继续执行,直到所有PLINE均被正反向两次连入多边形,结束循环. 三,自动生成道路双线的程序算法在autoCAD中画双线的方法有多种,但都需要人工操作.虽然可用程序模拟操作过程来实现一定程度的自动化,但只能处理较简单的规则图形,遇到较复杂的图形或特殊情况往往产生不可预料的错误结果. 本程序的基本思路为利用拓扑算法找出交通网络中的每个独立的最小多边形,按给定的道路宽度半值,将多边形边界等距平移向内缩进,所有多边形都等距平移之后,也即形成了每条道路的左右边线.本程序对数 abc图一1.结点匹配由于数字化采点误差的存在,汇合于同一结点的各链段端点坐标值不一致,必须归算为统一的坐标.分析任意输入的图形,不符合拓扑结构的情况主要有以下几种: a汇合于同一结点的各个端点与端点之间,端点与顶点之间,顶点与顶点之间的坐标不一致(如图一a,b,C); b端点或顶点偏离了位于一直线上的结点(如图一d);c端点或顶点偏离了位于两直线交叉点上的结点(如图一e,f).节点匹配的定点原则为:a取各端点或顶点的重心坐标作为结点;b取直线上距端点或顶点的最近点作为结点;C取两直线交叉点作为结点.将端点或顶点坐标值统一改到结点上来.遇到上述三种的综合情况时,结点坐标取值的优先级序为c,b,a.结点匹配的阀值字化输入图形不要求结点捕捉.只要保证一定的对点精度;对链段也不要求逐段分开输入,可随道路走向连续数字化以保持原图形的固有特征.程序自动进行结点匹配,链段构造,杂质过虑,搜索多边形并绘出等距平移线.de即数字化动态采点误差限,一般设为图上0.5ram……1.0mm.2.链段重构欲使一个任意数字化的网络符合拓扑图的数据结构除了与同一结点关联的链段端点坐标要精确重合外,还必须使每条链段起止于邻接的两个结点.因此所有穿越结点的 PLINE都要在结点处中断.方法是沿每条 PLINE逐段搜索与其他线段的交点,有交点处必为结点之所在,则将PLINE分断重画. 3.杂质过虑由于原图数字化时出现的一些情况,如 PLINE中有小于匹配阀值的线段,有极小角的短线交汇或重复数字化的线段等,经结点匹配和链段重构后,会产生完全重合的链段在PLINE中出现重合的相邻点.这将影响下一步的多边形搜索,因此必须预先过虑. 4.多边形搜索一般情况下,判断多边形搜索是否闭合的条件为:当前结点即是起始链段的起点又是当前链段的终点.但在交通网中搜索多边一17—形的目的是为了绘道路边线,当遇到悬挂链段或自环闭链段时(如图二a,b),则不能简' 单地将其闭合,否则绘出的道路边线将出现J T交叉现象(如图--).如果将一条链段分为不同方向的左右两个侧面,即等距平移前的道 [I]a当前链段为在当前结点上按左转算法取得的后继链段;b该链段相对于当前结点的出发方向已经用过.当遇到悬挂结点(悬挂链段或非连通链段(如图二c)的尽头)时,后继续段即为原链段的相反方向.有如沿链段的一个侧面到达该结点后再沿另一侧面从该结点出发. 5.边界线等距平移a图四四,结束语.早期的地图数据库以机助制图为主要目的,而现在则更多地以建立GIS的空间数据基础为主要目的,由此引发了图形数据结构组织的根本变化.从原来的直接用点线实体一笔一划地仿真模拟地图的符号表示法,发展为图形数据只记录地理要素的定位几何特一l8一路边线,那么多边形搜索就成了沿道路_侧' 连续搜索前进的过程.丽链段相对于其关联 ,f'的结点而言,可分为该结点的到达方向和该_ 结点的出发方向.此时,判断闭合结点的条件为:图三获得多边形数据后,即可逐点计算两相邻线平移后的交点,线段平移的距离取不同等级道路宽度值的二分之一.当两线段转角等于180度或两链段道路等级不同而转角接近180度时(如图四),不能用求交点的方法, 而直接用平移后的端点作为新点.甩PLINE 命令绘出等距平移后的新交点集,即得到了一条街区线,所有街区线均绘出后即完成了每条道路的双线边界.b征("骨架线"),结合属性数据描述"骨架线"的性质.符号系统则完全从图形中独立出来,当需要终端输出模拟地图时再根据 "骨架线"的属性配戴相应的符号.这样的好处在于:1.数据冗余少,占用空间小{2.每个地理物体对应一个图形实体,便于属性挂钩;3.便于图形数据的修改更新;4.便于建立拓扑关系;5.可按不同的比例尺或不同的符号风格输出地图等.根据本文思路笔者在autoCAD12.0平台上开发了LISP程序"jiedao.Lsp",实践证明它特别适用于城镇的地图数字化.只要将街道中心线分级数字化在"儿","J2", "J3",…图层上,设定各级街道的宽度,执行程序,即自动在"JD"图层上生成双线街道图.数字化时街道分级尽可能详细些,而生成双线时根据需要选取或合并输出,则相当于具有可变焦距的数据结构特征,从而实现一定程度的制图综合取舍自动化.一般手工操作需要3,5天才能完成的工作利用本程序只需几分钟便可完成.为AutoLisp增加几个实用函数浙江省测绘局科研所陆晓鸣一,引言AutoLisp作为AutoCAD内嵌的解释性编程语言,具有方便灵活的特点,为用户以AutoCAD为通用平台进行定制提供了很大方便.但是AutoLisp语言本身的功能在某些方面还有些欠缺,在我们编程实践中,我们发现有些子程序在实际应用中要经常用到,因而可作为AutoLisp的函数一样来处理.下面我们就实际工作中常用到的几个函数作一介绍.二,几个常用的函数1.用于提取多义线顶点的vertex.1sp我们知道,简单的数字化地形图,通常还是要用图式符号表示的.但是,在数字化板上进行数字化时,许多线状符号通常只是用Pfine命令数字化骨架线,其符号的生成需要根据符号的特点编程实现,这时就需要首先提取多义线的顶点坐标.这里我们就给出提取顶点的函数如下:(defungetver(ent/tempkjverlstsubentelement)(setqverlst'())(setqsubent(entnextent)) (setqkj1)(whilesubent;遍历整个多义线子实体(setqtemp(entgetsubent)) (if(:(edr(assoe0temp))"SEQEND);多义线子实体结束标志 (setqsubentnil)(progn(if(=(cdr(assoe70temp))16);忽略内插点(setqkj(+kj1)))(if(<=kj2)一19—。
用LISP语言自定义AutoCAD命令
![用LISP语言自定义AutoCAD命令](https://img.taocdn.com/s3/m/0cd7cd065901020207409c3c.png)
用LISP语言自定义AutoCAD命令AutoLISP语言作为AutoCAD的二次开发工具,虽然在功能、运行速度和保密性等方面比起ARX等工具要逊色一些,但由于它易学易用,交互性好,灵活性强,对于那些经常使用AutoCAD进行绘图的普通用户来说,不失为一种理想的开发工具。
下面就介绍用AutoLISP 语言自定义的几个AutoCAD绘图命令,可以起到简化操作、提高作图效率的作用。
一、键槽尺寸视图的绘制命令“jct”在绘制轴、齿轮或带轮等零件图时,经常需要画轴上键槽处的剖视图或轮毂键槽的端面视图,比较麻烦;由于键槽的尺寸随轴径的变化而变化,所以我们可以用LISP程序来实现自动绘图。
加载下面的程序,在命令行中键入”jct”并回车,通过人机交互的形式输入有关参数,可自动完成轴上键槽的剖视图和轮毂键槽的端面视图的绘制。
代码示例如下所示。
(defun C:jct ()(setq pt0 (getpoint "\n 请输入视图的中心位置点:"))(initget 7)(setq loop T)(while loop(setq d (getreal "\n请输入键槽处的轴径(12<d<130)(mm):"))(if(or (< d 12) (> d 130))(alert "轴径数据输入错误!\n\n请重新输入!")(setq loop nil));if);while(cond;根据轴径检索键槽尺寸((and (> d 12) (<= d 17)) (setq b 5 t1 3.0 t2 2.3));b表示键槽的宽度((and (> d 17) (<= d 22)) (setq b 6 t1 3.5 t2 2.8));t1表示轴上键槽的深度((and (> d 22) (<= d 30)) (setq b 8 t1 4.0 t2 3.3));t2表示轮毂上键槽的高度((and (> d 30) (<= d 38)) (setq b 10 t1 5.0 t2 3.3))((and (> d 38) (<= d 44)) (setq b 12 t1 5.0 t2 3.3))((and (> d 44) (<= d 50)) (setq b 14 t1 5.5 t2 3.8))((and (> d 50) (<= d 58)) (setq b 16 t1 6.0 t2 4.3))((and (> d 58) (<= d 65)) (setq b 18 t1 7.0 t2 4.4))((and (> d 65) (<= d 75)) (setq b 20 t1 7.5 t2 4.9))((and (> d 75) (<= d 85)) (setq b 22 t1 9.0 t2 5.4))((and (> d 85) (<= d 95)) (setq b 25 t1 9.0 t2 5.4))((and (> d 95) (<= d 110)) (setq b 28 t1 10.0 t2 6.4))((and (> d 110) (<= d 130)) (setq b 32 t1 11.0 t2 7.4)))(command "circle" pt0 "d" d)(command "zoom" "a")(setq s1 (ssget "l" ))(setq di (-(* (/ d 2.0) (/ d 2.0)) (* (/ b 2.0) (/ b 2.0)))dx (sqrt di)dy (/ b 2.0)pt1 (list (+ (car pt0) dx) (+ (cadr pt0) dy)))(initget "Zc Lc");Zc表示画轴键槽的剖视图,Lc表示画轮毂键槽的端面视图(setq zrl (getkword "\n 画轴键槽的剖视图还是轮毂键槽的端面视图(Z/L)?"))(if (= zrl "Zc")(progn;计算轴键槽上点的坐标(setq pt2 (list (+ (car pt0) (-(/ d 2.0) t1)) (+ (cadr pt0) dy))pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 0 (- dx (- (/ d 2.0) t1)))));progn);if(if (= zrl "Lc")(progn;计算轮毂键槽上点的坐标(setq pt2 (list (+ (car pt0) (+(/ d 2.0) t2)) (+ (cadr pt0) dy))pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 (- pi) (- (+ (/ d 2.0) t2) dx))));progn);if(command "pline" pt1 pt2 pt3 pt4 "");画键槽(setq s2 (ssget "l"))(command "layer" "m" 5 "l" "center" 5 "c" 1 5 "")(command "ltscale" 8)(command "line" (polar pt0 (- pi) (+ (/ d 2.0) 10));画中心线(polar pt0 0 (+ (/ d 2.0) 10)) "")(command "line" (polar pt0(-(/ pi 2.0)) (+ (/ d 2.0) 10))(polar pt0 (/ pi 2.0) (+ (/ d 2.0) 10)) "")(command "layer" "s" 0 "")(if (= zrl "Zc")(progn(setq s3 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s3 "");修剪形成键槽(command "hatch" "U" "45" "2" "n" s1 s2 ""));画轴上键槽处剖视图的剖面线);if(if (= zrl "Lc")(progn(setq s4 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s4 "");修剪形成键槽(command "rotate" s1 s2 "" pt0 90));将轮毂键槽的端面视图旋转90度);if);end defun二、螺纹孔剖视图的绘制命令“lwk”在绘制机械零件图时,经常要画螺纹孔的剖视图,同样由于螺纹孔的有关尺寸都随螺纹的公称直径而变化,我们可以用下面的程序自动完成其剖视图的绘制。
LISP语言在CAD方面的运用
![LISP语言在CAD方面的运用](https://img.taocdn.com/s3/m/728f4768561252d380eb6e6c.png)
(0 . " LWPOLYLINE" )表 说 明 所 选 则 的 实 体 为 LWPOLYLINE 线 。 (下 转 63 页 )
- 57 -
科技论坛
中国高新技术企业
立数学模型, 有时即使建立了数学模型, 也难于获得数值解。这时, 模拟法则成为一种有效的工具。模拟法十分灵活, 且不受系统规模 限 制 , 它 可 以 详 细 模 拟 事 故 前 的 备 件 、发 电 和 输 电 停 运 及 运 行 中 的 实 际 问 题 , 但 耗 时 多 而 且 精 度 不 高 , 这 种 方 法 主 要 用 于 发 、输 电 组 合 系统及变电站的可靠性评估中。
3.2 文字的特性 下面再来看看说 明 所 选 则 的 实 体 在 DLSS 层 。 (6 . " X2 " )则 表 示 此 线 条 的 线 型 为 X2 , X2 为 用 户 定 义 的 线 型 。 (90 . 4 )说 明 此 线 有 4 个 端 点 。 (70 . 128 )表 明 此 线 没 有 封 闭 。 如 为 129 则 表 示 多 义 线 首 尾 相 连, 是严格闭合。 (43 . 0 .1 )显 示 此 线 的 宽 度 为 0 .1 米 。 (10 41 .3308 23 .3799 )则 给 出 了 端 点 的 坐 标 值 。依 次 下 去 分 别 为 各端点的坐标。 (- 3 (" SOUTH" (1000 . " 164100 " ))))表 示 此 实 体 的 扩 展 特 性 , 一 般为编程者的意图。 针对所提的第一个问题, 对比下面的等外公路特性。
cadlsp
![cadlsp](https://img.taocdn.com/s3/m/c074ad6759fb770bf78a6529647d27284b73372c.png)
CADLSP简介CADLSP是一种计算机辅助设计语言(Computer-Aided Design Language Specification),它是为了简化CAD软件的使用和开发而设计的。
CAD是计算机辅助设计的缩写,是指利用计算机技术辅助进行设计的过程。
CAD软件在工程设计、制造生产和科学研究等领域起到了重要的作用。
然而,由于不同CAD软件之间的语法和数据格式差异较大,导致了使用和开发的困难。
CADLSP的目标就是通过定义一种通用的语言规范,来解决这个问题。
特性CADLSP具有以下几个特性:1.语法简单清晰:CADLSP采用简洁的语法,易于学习和使用。
它的语法规则清晰明了,使用者可以很容易地编写和读取CADLSP代码。
2.可扩展性强:CADLSP支持自定义函数、变量和数据类型,使用者可以根据需要扩展CADLSP的功能和特性。
这种灵活性使得CADLSP适用于各种不同的CAD软件需求。
3.与CAD软件无关:CADLSP是一种独立于具体CAD软件的语言规范,它与任何CAD软件都可以兼容。
使用CADLSP编写的代码可以在不同的CAD软件中运行,无需额外的修改。
4.跨平台支持:CADLSP可以在不同的操作系统和平台上运行,如Windows、Linux和macOS等。
这使得CADLSP成为一个强大的工具,在不同的环境中都能得到良好的支持。
用途CADLSP主要用于简化CAD软件的使用和开发过程。
它可以被广泛应用于以下几个方面:1.CAD软件的快速开发:CADLSP为CAD软件的开发提供了一个统一的语言规范,使得开发人员可以更快速地开发高质量的CAD软件。
2.CAD软件的定制化:CADLSP允许用户自定义函数和数据类型,使得CAD软件可以根据用户的需求进行定制化。
用户可以根据自己的工作流程和习惯,编写CADLSP 代码来实现个性化的CAD设计功能。
3.CAD软件的扩展功能:CADLSP的灵活性和可扩展性使得CAD软件的功能可以得到进一步扩展和增强。
五个实用的AutoCAD的lisp程序
![五个实用的AutoCAD的lisp程序](https://img.taocdn.com/s3/m/5346cb07fe00bed5b9f3f90f76c66137ee064feb.png)
五个实用的AutoCAD的lisp程序1、计算CAD图形中所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度)(defun c:LL ()(setvar "cmdecho" 1)(setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))(setq i 0)(setq ll 0)(repeat (sslength en)(setq ss (ssname en i))(setq endata (entget ss))(command "lengthen" ss "")(setq dd (getvar "perimeter"))(setq ll (+ dd ll))(setq i (1+ i)))(princ "所选线条总长为:")(princ ll)(princ))2、标注CAD图形中所有线段(加载后只需框选所有线段便可得标注这些线段)(defun c:LLL ()(COMMAND "UCS" "")(setvar "cmdecho" 1)(SETVAR "OSMODE" 0)(setq AcadObject (vlax-get-acad-object)AcadDocument (vla-get-ActiveDocument Acadobject)mSpace (vla-get-ModelSpace Acaddocument));;选取需要测量的样条曲线、圆弧、直线、椭圆(setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))(setq i 0);;获取系统参数textsize(setq shh (getvar "textsize"))(setq str_hh (strcat "\n文字高度 <" (rtos shh 2) ">: "))(setq hh (getdist str_hh))(while hh(setvar "textsize" hh)(setq hh nil));;输入标注文字高度;;循环开始(repeat (sslength en)(setq ss (ssname en i))(setq endata (entget ss))(command "lengthen" ss "")(setq dd (getvar "perimeter"))(princ (strcat "\n长度=" (rtos dd 2)));;寻找代表图层的字符串(setq aa (assoc 0 endata));;获取图层名称(setq aa1 (cdr aa));;判断线条种类(cond((= aa1 "SPLINE");;如果是spline(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss))(setq startPnt1 (vla-get-ControlPoints arcObj))(setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(setq pp1 (list x1 y1 z1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))(setq pp2 (list x2 y2 z2))))((= aa1 "LWPOLYLINE");;如果是LWPOLYLINE(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-Coordinates arcObj)) (setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(setq pp1 (list x1 y1 z1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))(setq pp2 (list x2 y2 z2))))(t;;如果是其他种类线条(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-StartPoint arcObj));;获取起点(setq endPnt1 (vla-get-EndPoint arcObj));;获取终点(setq pp1(vlax-safearray->list (vlax-variant-value startPnt1)))(setqpp2 (vlax-safearray->list (vlax-variant-value endPnt1)) ))))(setq x1 (car pp1))(setq y1 (cadr pp1))(setq z1 (caddr pp1))(setq x2 (car pp2))(setq y2 (cadr pp2))(setq z2 (caddr pp2))(setq x (/ (+ x1 x2) 2))(setq y (/ (+ y1 y2) 2))(setq z (/ (+ z1 z2) 2))(setq pt (list x y z));;取得线段两端的中点(setq ang (angle pp1 pp2));;获取角度(if (> (* (/ ang pi) 180) 180)(setq ang (+ ang pi)))(command "text""j""bc"pt""(* (/ ang pi) 180)(strcat "" (rtos dd 2))"")(setq i (1+ i)))(prin1))(prompt "\n <>在图中直接写出长度") (prin1)3、连续打断程序(defun c:br1 ()(command "break" pause "f" pause "@"))4、将CAD文字导入Excel表格(defun c:Q2()(setq ffn (getfiled "写出文件" "" "xls" 1))(princ "\n选取文字...")(setq ss (ssget))(setq ff (open ffn "w"))(setq i 0)(repeat (sslength ss)(setq ssn (ssname ss i))(setq ssdata (entget ssn))(setq sstyp (cdr (assoc 0 ssdata)))(if (or (= sstyp "TEXT") (= sstyp "MTEXT"))(progn(setq txt (cdr (assoc 1 ssdata)))(princ txt ff)(princ "\n" ff)))(setq i (1+ i)))(close ff)(princ (strcat "\n写出文件: " ffn))(prin1))5、删除带颜色图元以下程序在别人的贴子里贴过.为了说明问题,今天再贴一次。
LISP语言在CAD方面的运用
![LISP语言在CAD方面的运用](https://img.taocdn.com/s3/m/728f4768561252d380eb6e6c.png)
(8 . " DLSS" )表 说 明 所 选 则 的 实 体 在 DLSS 层 。 (6 . " X2 " )则 表 示 此 线 条 的 线 型 为 X2 , X2 为 用 户 定 义 的 线 型 。 (90 . 4 )说 明 此 线 有 4 个 端 点 。 (70 . 128 )表 明 此 线 没 有 封 闭 。 如 为 129 则 表 示 多 义 线 首 尾 相 连, 是严格闭合。 (43 . 0 .1 )显 示 此 线 的 宽 度 为 0 .1 米 。 (10 41 .3308 23 .3799 )则 给 出 了 端 点 的 坐 标 值 。依 次 下 去 分 别 为 各端点的坐标。 (- 3 (" SOUTH" (1000 . " 164100 " ))))表 示 此 实 体 的 扩 展 特 性 , 一 般为编程者的意图。 针对所提的第一个问题, 对比下面的等外公路特性。
(SETQ XR1 (RTOS(FIX(* (getvar " tdusrtimer" ) 10000000000)))) 用 getvar 函 数 读 取 内 部 数 字 变 量 tdusrtimer 的 值 , 扩 大 后 用 数 字 计 算 函 数 FIX 取 整 , 用 数 据 类 型 转 换 函 数 RTOS 把 数 字 常 量 转 换 为 字 符 常 量 , 再 赋 予 给 变 量 XR1 。
(0 . " LWPOLYLINE" )表 说 明 所 选 则 的 实 体 为 LWPOLYLINE 线 。 (下 转 63 页 )
- 57 -
科技论坛
中国高新技术企业
立数学模型, 有时即使建立了数学模型, 也难于获得数值解。这时, 模拟法则成为一种有效的工具。模拟法十分灵活, 且不受系统规模 限 制 , 它 可 以 详 细 模 拟 事 故 前 的 备 件 、发 电 和 输 电 停 运 及 运 行 中 的 实 际 问 题 , 但 耗 时 多 而 且 精 度 不 高 , 这 种 方 法 主 要 用 于 发 、输 电 组 合 系统及变电站的可靠性评估中。
AUTOCAD中的几个LISP程序
![AUTOCAD中的几个LISP程序](https://img.taocdn.com/s3/m/a2ad11ccda38376baf1faecb.png)
AUTOCAD中的几个LISP程序李敬--------------------------------------------------------------------------------机械制图中,常常得做许多大量的重复工作。
下面这几个用Lisp编写得程序,是我画图时经常使用的,节省了我的不少时间,希望也能帮助广大使用AUTOCAD的工程师们。
1.自动求和机械制图中材料表的填写是毕不可少的,填写完后还需根据材料表求出总重量。
一般一幅图中常有几十个物体,将这些重量一项一项相加个繁琐的过程,而且容易出错。
使用下面这个程序,只需用鼠标选定需要相加的数,其和就会自动的显示在命令行中。
因为在AUTOCAD中没有“数”这种实体,所有的数都以实体“TEXT”存在,所以程序中使用了“atof”函数,将以字符串形式表示的数转换为实数。
(defun c:total( / cmdmode sset ssl nsset temp ssl1 total)(if *error* quit)(setq cmdmode (getvar "cmdecho"))(setvar "cmdecho" 0)(prompt "\nSelect numbers to add: ")(setq sset (ssget))(if (null sset)(princ "\nError: Nothing selected!\n");过滤出选中的“text”实体,并报告有多少“text”实体被选中。
(progn(setq ssl (sslength sset))(setq nsset (ssadd))(while (> ssl 0)(setq temp (ssname sset (setq ssl(1- ssl))))(if (= (cdr (assoc 0 (entget temp))) "TEXT")(ssadd temp nsset)))(setq ssl (sslength nsset))(print ssl)(princ "text entities are found.");选出所有可转化为数的“TEXT”,并求和。
LISP语言在CAD工程制图中的应用_谢威
![LISP语言在CAD工程制图中的应用_谢威](https://img.taocdn.com/s3/m/291654c99ec3d5bbfd0a7426.png)
C/C++ 的 ObjectARX。这里推荐使用 LISP 语言是因为在 AutoCAD 中集
成了两种语言的开发环境,并且有详细的帮助文件。LISP 语言是人工智
能学科领域中广泛采用的一种程序设计符号语言。这种语言在参数化
绘图中有很大的灵活性,并且可以实现一定的人工智能。LISP 开发出的
程序可以像运行 CAD 普通命令一样在命令行中直接键入自己定义的命令运行,保Fra bibliotek了用户的绘图习惯。
工程制图人员采用 LISP 语言编写出适合工作需要的工具,使工程制
图人员如虎添翼,大大提高了工作效率,在更加广阔的天地里施展才华。
参考文献 [1]《AutoLISP 程序员参考手册》 [2]《AUTOCAD 使用手册 》 [3]《南方 CASS 使用手册》
— 627 —
科技信息
计算机与网络
LIS P 语言在 CAD 工程制图中的应用
辽宁省第六地质大队 谢 威 辽宁省第二水文地质工程地质大队 杨 娇
[摘 要]针对 CAD 技术在测量制图工作中的重要性,而 LISP 程序是 CAD 技术的重要拓展,结合自已的工作体会,提出一种工具 程序设计,并用 LISP 语言编程,实现计算机的自动设计、计算、制图功能,使工程制图工作更有效的顺利进行。 [关键词]LISP 工程制图 CAD 技术
一、引言 LISP(List Processor)程序语言是由 Autodesk 公司开发的一种程序 语言。AutoCAD 软件包中包含大多数用于产生图形、处理图形的命令, 但仍有某些命令末被提供。通过 AutoLISP,可以使用 AutoLISP 程序语 言编制能够在图形文本对象内编写工具或作全局选择性改变程序。 在工程测量中,内业资料计算占有很重要的比重,内业资料计算的 速度直接决定了测量工作的快速、顺利地完成。计算机辅助设计 (Computer Aid Design 简写 CAD,常称 AutoCAD)是 20 世纪 80 年代初 发展起来的一门新兴技术型应用软件。如今在各个领域均得到了普遍 的应用。而 AutoCAD 配合 AutoLISP 语言编制出的程序,使测量内业资 料整理更加有效的顺利进行,从而大大减少内业工作量。以下通过编写 “图块过滤”的 LISP 程序工具来说明程序在制图中的应用。 二、工程制图 LISP 实用程序 1、主程序 (defun c:gltk () (princ "** 使用此程序时必须全图显示 **") (setvar "cmdecho" 0) (SETVAR "pickstyle" 0) (setq B (assoc 2 (entget (car (entsel "< 请选择需要过滤图块:>"))))) (setq xisijl
实现CAD绘图与LISP编程的自动化技巧
![实现CAD绘图与LISP编程的自动化技巧](https://img.taocdn.com/s3/m/daff7316cec789eb172ded630b1c59eef9c79a6d.png)
实现CAD绘图与LISP编程的自动化技巧CAD(计算机辅助设计)是一种广泛应用于工程和建筑行业的软件工具,而LISP(LISt Processing)则是一种编程语言,经常用于CAD 软件中进行自动化任务和定制。
在CAD绘图中,使用LISP编程可以极大提高工作效率,加快绘图速度并减少出错概率。
下面,我们将介绍一些实现CAD绘图与LISP编程的自动化技巧。
1. 使用LISP编写简单命令LISP语言在CAD软件中被广泛应用,因其简洁、灵活和强大的功能而备受赞誉。
可以利用LISP编写一些简单的命令,以自动完成一些常见的绘图任务。
例如,我们可以编写一段LISP代码,用于创建一个特定大小和形状的矩形或圆形,并将其放置在指定位置。
2. 利用LISP实现参数化绘图参数化绘图是CAD绘图中常见的需求,它可以根据一组参数值自动生成特定形状和尺寸的图形。
利用LISP编程可以方便地实现参数化绘图。
通过定义参数,并使用LISP代码控制参数值,可以在绘图过程中灵活地调整形状和尺寸,提高工作效率。
3. 利用LISP编写循环和逻辑语句LISP编程强大之处在于其循环和逻辑语句的灵活性。
通过编写循环和逻辑语句,可以实现复杂的绘图任务,如图形的重复、数组的生成等。
例如,我们可以使用循环语句自动生成一系列具有相同属性但位置不同的图形。
4. 利用LISP批处理CAD命令CAD软件中的批处理命令可以用于自动执行一系列CAD操作,如创建图层、更改对象属性等。
利用LISP编程可以轻松地实现批处理CAD命令。
通过编写LISP代码,将多个CAD命令组合在一起,可以以一次性的方式自动执行这些命令,从而减少人为干预。
5. 利用LISP创建自定义CAD函数和命令除了使用CAD软件中已有的命令,我们还可以通过LISP编程自定义CAD函数和命令,以满足特定的需求。
通过编写LISP代码,可以根据自己的需要定义函数和命令,从而实现更高级和复杂的CAD绘图操作。
CAD中LISP程序使用方法
![CAD中LISP程序使用方法](https://img.taocdn.com/s3/m/74e9f9fafad6195f302ba603.png)
CAD中LISP程序使用方法2007-08-06 19:13:32| 分类: 学习园地 |字号订阅1. 对于提供附件下载的,把附件下载就可以了2. 对于提供的源LISP代码,把代码拷贝、粘贴到一个文件,自己起个名或者若程序里面注释推荐了文件名,就用推荐的,然后保存成扩展名是LSP的文件即可了。
LISP程序使用方法:加载LISP1. 可以使用APPLOAD命令,然后去找到要加载的LISP文件,加载即可。
2. 可以自己从文件管理器把LISP文件拖动到ACAD的图形窗口,也可以加载3. 在命令行后用,(load "c:\\temp\\xxx.lsp")也可以加载,路径名请输入实际的路径。
另:对于一个LSP程序,(defun 后面的既是命令或者函数,一般程序应该有提示,若没有,标志符c:后面的单词是可以在ACAD下使用的命令,既可以在COMMAND:后面直接输入,即可执行。
CAD快速切换图层LISP代码(方法2)给楼主发一个图层更改的lisp程序,按对应数字键就可以切换到相应的图层。
很方便。
0————01————OBJ2————6t3————SCETR。
8————BORDER如果这些不是你想要的图层,将lisp用笔记本打开,把里边的OBJ,6t等图层名改为你想要的就可以了。
以后要切换图层时,按相应的数字键即可。
(defun YH_chlayer (YH_layer / YH_S)(if (null (tblsearch "LAYER" YH_layer))(entmake (list'(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 YH_layer) ;图层名称'(70 . 0) ;图层状态'(62 . 7) ;图层颜色'(6 . "bylayer") ;图层线型 )))(setq YH_S (cadr (ssgetfirst))) (if YH_S(command "CHPROP" YH_S "" "la" YH_layer "c" "bylayer" "")(setvar "clayer" YH_layer))(princ))(defun c:0 ()(YH_chlayer "0"))(defun c:1 ()(YH_chlayer "OBJ"))(defun c:2 ()(YH_chlayer "6t"))(defun c:3 ()(YH_chlayer "SCETR"))(defun c:4 ()(YH_chlayer "HIDD"))(defun c:5 ()(YH_chlayer "DIM"))(defun c:6 ()(YH_chlayer "DASH"))(defun c:7 ()(YH_chlayer "TEXT"))(defun c:8 ()(YH_chlayer "BORDER") ) #Cad到上面一行为址,保存为lsp格式。
AutoLISP在AutoCAD绘制管线规划中的应用
![AutoLISP在AutoCAD绘制管线规划中的应用](https://img.taocdn.com/s3/m/90bfdc499a6648d7c1c708a1284ac850ad0204cd.png)
第39卷第4期Vol. 39, N o.4 2021年4月A p r.2021[文章编号]1009-7767 (2021 )04-0124-04D O I:10.19922/j.1009-7767.2021.04.124 AutoLISP在AutoCAD绘制管线规划中的应用吴捷(缜江市规划勘测设计集团有限公司,江苏镇江212001)[摘要]管线规划设计中,若不同类別的管线投影交叉,位于上方的管线可完整显示,但其下方的管线则要断开表示。
由于各类管线交叉众多,设计人员除了要完成管线设计绘制外,尚需花费大量时间进行管线断线,效率低下,采用A u t o C A D内置的A u t o L I S P编程语言进行二次开发,并分別测试了市政道路、居住小区管线规划中的管线断线耗时,结果表明采用AutoLISP 进行管线的自动断线,可大幅提高管线规划的绘图效率。
[关键词]管线规划;A u t o C A D;A u t o L I S P;管线断线;应用[中图分类号]U412.6 [文献标志码]BApplication of AutoLISP in Drawing Pipeline Planning by AutoCADW u j i e(Zhenjiang Planning Survey&Design Group Co.,Ltd.,Zhenjiang212001, China)Abstract:When different categories of pipelines cross in pipeline planning and design,the upper pipeline shall be displayed completely while the lower one shall be disconnected.In addition to drawing the pipeline design,designers have to spend a lot of time breaking the pipeline which is inefficient due to many kinds of pipeline cross with each other.The AutoCAD's built-in AutoLISP programming language is secondary developed to test the time consumption of pipeline disconnection in municipal road and residential district pipeline planning respectively.The results show that automatic pipeline disconnection by AutoLISP can greatly improve the drawing efficiency of pipeline planning. K eyw ords:pipeline planning;AutoCAD;AutoLISP;pipeline disconnection;application城市地下管线规划是城市地下管线建设和管理的依据。
LISP语言在CAD工程制图中的应用
![LISP语言在CAD工程制图中的应用](https://img.taocdn.com/s3/m/166e2c1b4431b90d6c85c77a.png)
、
2、 函数说 明 ()tr 1s v 函数用于给 A tC D系统变量赋值。系统变量名必须置 ea uo A
于双 引号 中 。
st r函数 格 式 为 :sta r be n m a e ev a (e r ai l- a e l ) v v a vu
二 、 程 制 图 LS 工 IP实 用 程 序
其 中 vr ln m …………Auo A ai e a e b a t D系统变量 C v u … …………………赋予系统变量 的值 ae l ( )m eh 系统变量 : 制 Auo IP的 cmmad函数运行时 A — 2 c dc o 控 t S L o n u tC o AD是否 回显提示 和输入。 ()t 3 s q函数用 于给变量赋值 , e 其格式如下 : (e a evle N me a e … ) st m au[ a l ] qn vu 其中N e m a …………………变量名 v u … … … … … … …赋 予 变 量 的值 l ae ( )eds 函数 暂停程 序的运行 , 4 gti t 等候用户输 人距 离 , 随后 以实数 形式返 回该距 离。gti 函数格 式为 : e s dt (e i[ o t r pj g d t i 儿Po t) tsP n m 其中 Pit on…………………距离 的第一点坐标 Po p………………须在屏幕上显示的提示信息 r t m ( )r 函数用于与 i 5po n g f 函数搭配 , 以求解 多个表达式 。其格式为 : (rg 表 达 式 ) po n 当 测 试 条 件 返 回“ ” , 函数 只 能求 解 一个 表 达式 。 po 函数 真 时 证 rg n 可用于与 i函数搭配以求解 多个表达式 。 f 3 程 序使用方法 、 假设 有一片果 园 , 充符号过密 , 填 通过使用本程 序实现 以 3 O米间 距 填充 。 () 1 打开基于 C D基础开发 的 C S A A S软 件 , 绘制一片果 园, 1所 图
AutoLISP程序在AutoCAD中的应用实例1
![AutoLISP程序在AutoCAD中的应用实例1](https://img.taocdn.com/s3/m/fb5c3022b4daa58da0114a89.png)
AutoLISP程序在建筑设计中的应用实例孙煜广东机电职业技术学院广州510515摘要:笔者在AutoCAD平台上,用LISP语言编写了一系列程序,提高了出图效率和设计的准确性。
关键词:计算机,计算机绘图,程序,lisp,建筑制图,结构设计1.程序设计目的目前,各建筑设计院一般都配备了建筑设计方面的专业软件,如“天正”,“探索者”等,在一定程度上提高了设计人员的效率,但各软件在使用上都有不便之处。
如各设计院的标准不同、设计人员的习惯不同,同时还存在地区差异等,因此设计人员在设计图时只能采用CAD“硬”画,效率低,质量也很难保证。
针对上述问题,笔者用AutoLISP编制了一系列辅助的小程序,这些程序的编制思路是按照传统的绘制方式,灵活运用于各个设计程序段,作为专业软件的有益补充。
2.主要程序介绍本程序组中主要包括的程序有:dc.lsp;200,250,300宽梁平面绘制a.lsp:从pkpm转化为初步设计文字s.lsp:将梁高度标注降低30mmvv.lsp:测量板净宽度w.lsp:排列梁编号工具fd.lsp:改变梁编号中数字aa.lsp:通过输入截面面积自动配钢筋3.使用方法本程序组是根据建筑结构设计中的各步骤来进行编制的,笔者将结构设计分为初步设计图,梁模板图,板钢筋图,梁钢筋图四个阶段。
设计人员在进行初步设计时,利用dc.lsp可以直接绘制双线作为梁截面线,利用a.lsp 将pkpm文字转化为初步设计标注,完成初步设计。
在梁模板图阶段,利用s.lsp将走廊地面或平台地面的梁高度统一降低30mm。
利用w.lsp进行梁编号绘制,用fd.lsp进行梁编号修改,完成梁模板图设计。
在板钢筋阶段,利用vv.lsp测量板宽,绘制板钢筋。
在梁钢筋阶段,用aa.lsp根据pkpm计算出的截面面积,输入截面面积直接配筋。
完成梁钢筋图设计。
4.程序举例下面以vv.lsp为例,介绍其程序内容。
vv.lsp程序通过输入AutoCAD已绘制的板内任意一点,自动对围成板的线条进行分析,排除不需要图层,自动测量出板两条线的净宽度值,然后标记在图上。
AUTOCADLISP操作数据库
![AUTOCADLISP操作数据库](https://img.taocdn.com/s3/m/047b695a6ad97f192279168884868762caaebbe5.png)
AUTOCADLISP操作数据库AutoCAD Lisp操作数据库是指在AutoCAD环境下,使用Lisp语言与数据库进行交互,实现数据的读取、写入、更新等操作。
Lisp是一种程序设计语言,可以与AutoCAD软件进行集成,为用户提供更强大的功能。
在AutoCAD Lisp中,可以使用Open Database Connectivity(ODBC)接口实现与数据库的交互。
ODBC是一种标准的数据库访问接口,可以使Lisp程序与各种类型的数据库进行通信,包括MySQL、SQL Server、Oracle等。
首先,需要在Lisp程序中设置ODBC连接,连接到指定的数据库。
可以使用`setq`命令定义一个连接字符串,其中包括数据库的用户名、密码、主机地址等信息。
然后使用`odbc-connect`函数建立与数据库的连接。
连接数据库后,可以使用一系列的Lisp函数进行数据库操作。
例如,可以使用`odbc-query`函数执行SQL查询语句,并将查询结果保存为Lisp列表。
查询结果可以用于绘制AutoCAD图形,或者用于其他需要的操作。
另外,还可以使用`odbc-exec`函数执行SQL更新语句,实现对数据库进行增删改操作。
更新操作可以用于修改AutoCAD图纸中的对象属性,或者更新数据库中的记录。
除了使用ODBC接口,还可以使用其他库函数实现数据库操作。
例如,可以使用`sql-find`函数查询数据库中的记录,并将结果存储在Lisp变量中。
查询结果可以用于自动创建AutoCAD图形,或者进行其他处理。
此外,还可以使用Lisp的特性,如循环、条件判断等,将数据库操作与AutoCAD绘图功能结合起来。
例如,可以根据数据库中的记录生成不同的图形,或者根据图纸中的对象属性更新数据库中的数据。
总之,AutoCAD Lisp操作数据库是一种强大的功能,可以实现与数据库的无缝集成。
通过Lisp语言的灵活性和AutoCAD的绘图功能,可以实现自动化的数据库操作,提高工作效率。
LISP编程语言在CAD绘图中的应用
![LISP编程语言在CAD绘图中的应用](https://img.taocdn.com/s3/m/fd0dd3c90875f46527d3240c844769eae009a3ef.png)
LISP编程语言在CAD绘图中的应用
江明明
【期刊名称】《北京测绘》
【年(卷),期】2016(0)1
【摘要】CAD因为其完善的功能和简便的操作已经在被广泛的应用,做为一种二次开发工具,LISP依据其语法简单,编写程序便捷、灵活、数据类型丰富等特点也得到了许多技术人员的学习和研究.它也可以在应用程序中使用对话框语言、控制菜单,还能够提示用户输入、直接访问内置AutoCAD命令,以及修改或创建图形数据库中的对象,向AutoCAD添加专用命令等.
【总页数】3页(P113-115)
【作者】江明明
【作者单位】天津市勘察院,天津300191
【正文语种】中文
【中图分类】P208
【相关文献】
1.Lisp语言在CAD绘制征地图中的应用 [J], 蒋昌盛
2.浅析基于LISP的多行文字对齐在AutoCAD制图中的实践应用 [J], 王建江;杨德贵;俎丽萍
3.基于LISP技术的AutoCAD二次开发在地图制图中的应用 [J], 吕丽英;耿云峰;丁哲
4.Lisp语言在水利水电工程地质勘察AutoCAD绘图中的应用 [J], 杨秀海
5.浅析基于LISP的多行文字对齐在AutoCAD制图中的实践应用 [J], 王建江;杨德贵;俎丽萍
因版权原因,仅展示原文概要,查看原文内容请购买。
LISP语言在CAD方面的运用
![LISP语言在CAD方面的运用](https://img.taocdn.com/s3/m/3c535d020622192e453610661ed9ad51f01d5438.png)
LISP语言在CAD方面的运用
谢安全
【期刊名称】《中国高新技术企业》
【年(卷),期】2008(0)5
【摘要】选用简单易学AUTOCAD的内部编程语言AUTOLISP来开发工作中的一些实用程序,介绍了一些最基础的内部函数和实体常用特性,力求更广泛地推动数字测绘发展.
【总页数】2页(P57,63)
【作者】谢安全
【作者单位】国家测绘局重庆测绘院
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于VisualLISP语言快速提取CAD管线信息SWMM建模方法探索 [J], 宁存鑫;汤钟;李翠萍;耿冰;成志轩
2.Lisp语言在数字化测绘方面的运用探讨 [J], 肖祥红;雷宇斌
3.Auto LIsp语言在尺寸公差方面的应用 [J], 张丽静;林承杰
4.Lisp语言在水利水电工程地质勘察AutoCAD绘图中的应用 [J], 杨秀海
5.基于Lisp语言的cad二次开发在U型渡槽截面设计中的应用 [J], 许婧;刘飞鹏;李继国
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章LISP语言在CAD道路设计中的各种应用3.1绘制平面任意函数曲线的AutoLISP程序设计在各个工程设计领域中,经常要绘制一些曲线,特别是平面曲线,如水工结构的溢流曲线、机械设计的齿轮渐开曲线等。
在AutoCAD绘图软件中,可以将曲线上的点先计算好,再用线、多义线、样条曲线等方法绘制,这种方法需要进行大量计算,工作量较大,如果用EXCEL软件来辅助计算,可以减轻工作量;另外,可以针对具体的曲线类型,用AutoCAD 内嵌的AutoLISP语言,实现边计算边绘制的功能。
用这种方法绘制虽然快捷,但对于不同的曲线,则需编写同的AutoLISP程序,检查无误后才能运行,仍显繁琐。
能否用统一的程序,来实现各种平面函数曲线的绘制,我们尝试利用AutoCAD中强大的表达式计算功能来实现这一目的。
3.1.1平面函数曲线的类型和绘制方法平面函数曲线即是有简单函数表达式的曲线类型,可考虑经常遇到的4类:(1)直角坐标下形如y=f(x)的曲线;(2)直角坐标下的参数方程曲线;(3)极坐标下形如r=f(θ)的曲线;(4)极坐标下的参数方程曲线。
其中,只需增加一个平凡方程x=x,参数方程(2)就可以包括相应的直接表达形式(1),同样(4)可以包括(3)。
同时,极坐标形式可以通过:x=rcosθy=rsinθ转换为直角坐标表达。
因此从本质上说,4种类型都可以互相转换,把它们分类的目的是尽量采用函数的通常表达形式,以便于使用。
绘制时,参照曲线的手工绘制方法,需要给出曲线上的多个点,然后将它们连接起来。
若给出的点间隔很小,直接用折线段相连就可很好模拟该曲线,如果间隔较大,可以用样条曲线连接,使之比较光滑。
假设我们计算出足够多的点,简单用折线连接即可,为使该曲线成为一个整体,可用多义线的方式连接。
关键的问题是,如何计算出曲线上点的坐标。
由于曲线的函数表达式各种各样,不可能用统一的式子来表示。
可以考虑从外部输入表达式,然后针对该表达式进行计算,给出相应结果,就能够解决点坐标的计算问题。
但这个功能的实现比较困难,幸好AutoCAD为我们提供了CAL命令,可以对任意的表达式进行计算。
该命令由函数库文件geomcal.arx提供,支持科学/工程计算器上的大多数标准函数,如三角函数、指数、对数等。
若表达式中有变量,而该变量在程序中已设定了值,则按该值进行计算。
由于该函数不是LISP内部函数,为使之可用,需要用ARXLOAD命令载入文件geomcal.arx,或者在命令行先输入CAL命令,由系统自动载入,这样,程序中就可以使用该函数了。
总的程序定义为c:curve(),以便在AutoCAD命令行中与通常的命令一样使用。
程序的总调用部分为:(arxload "geomcal.arx");载入提供表达式计算功能的ARX文件(vl- arx- import 'c:cal);让命令c:cal能够使用(princ "(1)直角坐标下曲线y=f(x).\n")(princ "(2)直角坐标下参数曲线x=f(i),y=g(i).\n")(princ "(3)极坐标下曲线r=f(theta).\n")(princ "(4)极坐标下参数曲线theta=f(i),r=g(i).\n")(setq ichoice (getint " 选择绘制曲线类型:"));选择曲线类型(if (= ichoice 1) (curve1));调用曲线绘制类型1(if (= ichoice 2) (curve2));调用曲线绘制类型2(if (= ichoice 3) (curve3));调用曲线绘制类型3(if (= ichoice 4) (curve4));调用曲线绘制类型4根据用户选择的曲线类型,转到相应的曲线类型绘制函数中,依次为直角坐标下的普通函数、参数方程,极坐标下的普通函数和参数方程。
3.1.2直角坐标下函数y=f(x)的曲线绘制直角坐标下绘制函数曲线y=f(x)定义为AutoLISP子程序curve1,该子程序没有传入传出参数。
程序的第一个步骤是读入有关的参数和控制变量。
首先读入y=f(x)的表达式,然后输入自变量x的变化范围[low,up],接着根据模拟精度,输入曲线剖分数目steps,x的变化步长即为step=(up- low)/steps,该步骤相应的AutoLISP程序如下:(setq funy (getstring "y=f(x)的表达式:")) (setq low(getreal "x 的下限值:"))(setq up (getreal "x 的上限值:"))(setq steps (getint " 剖分数目:"))(setq step (/ (- up low) steps))接下来就开始曲线的绘制,首先启动绘制多义线的命令,接着自变量x从下限值开始,由f(x)的表达式计算y坐标值,将该点的坐标输入到命令行,得到曲线的起点,然后自变量x 递增一个步长,计算下一个坐标点,曲线连接到该点,如此直到剖分数目结束,就完成了整个曲线的绘制,最后用一个空格退出多义线命令。
相应的AutoLISP程序如下:(command "pline");启动多义线命令(setq ii 0);循环变量ii设初值(setq x low);自变量x设初值(while (<= ii steps);控制循环数目(setq y (c:cal funy));对表达式进行计算,得到y坐标值(command (list x y));输入计算出的点坐标(setq ii (+ 1 ii));循环变量ii增加1(setq x (+ x step));自变量x递增一个步长(command "");退出多义线命令3.1.3直角坐标下参数方程曲线绘制直角坐标下参数方程与直接函数表达不同的是,引入参变量,坐标x和y都表达为该参变量的函数,这样,能够表示的函数更灵活多样,形式如下:在曲线绘制时,只需要将变量改为参变量,坐标计算时对x、y坐标都用表达式计算即可,相应的AutoLISP程序如下:(setq ii 0);循环变量ii设初值(setq i low) ;参变量i 设初值(while (<= ii steps) ;循环控制(setq x (c:cal funx)) ;由x=f(i)计算坐标x(setq y (c:cal funy)) ;由y=g(i)计算坐标y(command (list x1 y1)) ;向命令行输入点坐标(setq ii (+ 1 ii)) ;循环变量ii 增加1(setq i (+ i step)) ;参变量i 递增一个步长3.1.4 极坐标下函数r = f(θ)曲线绘制极坐标下函数r = f(θ)的不同之处在于输入点的坐标时,需要用极坐标输入方式,如20<30,表示极径为20,角度为30°,可以将得到的坐标值转换为字符串,再用角度符号“<”连接起来,输入到命令行。
也可以用另外一个简便方法,即利用极坐标和直角坐标之间的转换关系,变换到直角坐标后输入到命令行,该方法对应的AutoLISP程序如下:(setq ii 0) (setq e low) ;设置极角θ的初始值(while (<= ii steps) (setq r (c:cal funy)) ;计算极径r(setq x (c:cal "r*cos(e)")) ;由极径r 和极角θ转换为直角坐标下的x 值(setq y (c:cal "r*sin(e)")) ;由极径r 和极角θ转换为直角坐标下的y 值(command (list x y)) (setq ii (+ 1 ii)) (setq e (+ e step)) ;对极角递增一个步长3.1.5极坐标下参数方程曲线绘制极坐标下参数方程曲线的绘制,同直角坐标下的参数方程曲线绘制是类似的,即增加一个用参变量表达的极角θ的计算,相应的AutoLISP程序如下:(setq ii 0) (setq i low) ;设置参变量i 初值为下限值(while (<= ii steps) (setq e (c:cal funx)) ;由表达式计算极角θ(setq r (c:cal funy)) ;由表达式计算极径r(setq x (c:cal "r*cos(e)")) (setq y (c:cal "r*sin(e)")) (command (list x y)) (setq ii (+ 1 ii)) (setqi (+ i step)) ;参变量递增一个步长3.1.6总结利用AutoCAD的表达式计算功能,编写出绘制平面函数曲线的AutoLISP程序,根据外部输入的函数表达式,迅速绘制出函数曲线,且可以灵活控制曲线的模拟精度,避免了以往每绘制一种曲线都要重新编写程序的麻烦,使用起来十分方便。
可以参照本文的做法,绘制三维空间曲线或其他更复杂的曲线,或将表达式计算功能应用到其他设计环境中。
3.2基于AutoCAD的线路缓和曲线的自动绘制3.2.1背景铁路与公路的线路在定线中,由于受地形、地物或其他因素限制,需要改变方向。
在改变方向处,相邻两直线间要求用曲线连接起来,以保证行车顺畅安全这种曲线称平面曲线。
铁路与公路线上采用的平面曲线主要有圆曲线和缓和曲线,如图1所示。
圆曲线是具有一定曲率半径的圆弧;缓和曲线是连接直线与圆曲线的过渡曲线,其曲率半径ρ由无穷大(直线的半径)逐渐变化为圆曲线半径R。
在铁路干线线路中都要加设缓和曲线。
由于缓和曲线上各点的曲率半径及圆心均为变数,所以在绘制线路平面图时,利用绘图工具无法准确、有效地绘制出缓和曲线。
目前大多数采用曲线板近似描绘缓和曲线;或者是在AutoCAD中,用多段线近似代替缓和曲线。
这些方法作图不准确,而且作图效率低。
笔者在实践中,利用AutoLISP编程,实现了基于AutoCAD的缓和曲线加圆曲线的自动绘制。
3.2.2缓和曲线的主点及要素1.缓和曲线的形成图2(b)是没有加设缓和曲线的圆曲线。
缓和曲线是在不改变直线段方向和保持圆曲线半径不变的条件下,插入到圆曲线与直线段之间的平面曲线。
为了在圆曲线与直线之间加入一段缓和曲线l0,原来的圆曲线需要在垂直于其切线的方向上移动一段距离p(见图2(a)),因而圆心就由O移动到O1,而原来的半径R保持不变。