lisp 圆柱螺旋线_Visual LISP开发三维圆柱螺旋线程序
Visual LISP开发三维圆柱螺旋线程序
来源:dengzhongguo
作者:华仔
浏览:1062
时间:2016-08-10 14:18
标签:
摘要:
1、引言在众多的AutoCAD开发工具中,AutoLISP是使用最简单、应用最广泛、使用者最多的一种开发工具。但是,AutoLISP只是一种解释型语言,且不能加密。为了解决这个问题,Autodesk公司在AutoCADR14中推出了VisualLISP的测试版,随后在AutoCAD2000中推出了VisualLISP的正式版本。VisualLISP完全兼容以前的AutoLISP,同时应用了AutoCAD的另一个开发工具-----ObjectARX面向对象技术和ActiveX技术,使VisualLISP开发的应用程序功能更强
1、 引言
在众多的AutoCAD开发工具中,AutoLISP是使用最简单、应用最广泛、使用者最多的一种开发工具。但是,AutoLISP只是一种解释型语言,且不能加密。为了解决这个问题,Autodesk公司在AutoCAD R14中推出了Visual LISP的测试版,随后在AutoCAD 2000中推出了Visual LISP的正式版本。Visual LISP完全兼容以前的AutoLISP,同时应用了AutoCAD的另一个开发工具-----ObjectARX面向对象技术和ActiveX技术,使Visual LISP开发的应用程序功能更强大,运行速度更快,从而真正成为一个能开发商业软件的开发平台。本文作者采用AutoCAD 2000 中的Visual LISP进行了三维圆柱螺旋线程序开发,并与AutoCAD 2000交互绘图结合,快速绘制三维螺纹和弹簧。
2、 问题的提出
笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
3、 圆柱螺旋线的绘制
3.1 圆柱螺旋线数学模型
* 圆柱螺旋线的形成
圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
* 数学模型
当圆柱螺旋线的轴线与坐标系的Z轴重合时,
圆柱螺旋线上动点M(x,y,z)的参数方程如下:
x=rcosα
y=rsinα
z=±t1*α/(2π)
在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
3.2 程序框图
开始
参数r、t1、k赋值
给出基点坐标
计算x, y, z各点坐标
绘制螺旋线
结 束
3.3 程序代码
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。
绘制圆柱螺旋线的AutoLISP程序代码如下:
; This program is using for drawing a helix
(setq b1 (getpoint "请输入基点:"))
(setq r (getreal "半径 r=:"))
(setq t1 (getreal "节距 t1=:"))
(setq k (getint "段数 k=:"))
(setq n (getint "圈数 n=:"))
(setq ta (/ (* 2 3.14159) k))
(setq j1 (/ t1 k))
(setq a 0)
(setq jj 0)
(setq ii 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r 0 0))
(repeat n
(repeat k
(setq jj (+ jj 1))
(setq a (+ ta a))
(setq x (* r (cos a)))
(setq y (* r (sin a)))
(setq z (* j1 jj))
(setq p2 (list x y z))
(command p2)
)
(setq ii (+ ii 1))
(setq z (* t1 ii))
)
(command "" )
段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
3.4 程序运行结果
加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
4、 应用
* 绘制弹簧
在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
我们绘制的弹簧参数如下:
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
* 绘制螺纹
如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
5、 结论
(1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
(2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。
分享到:
lisp 圆柱螺旋线_Visual LISP开发三维圆柱螺旋线程序相关推荐
- linux 三维数据绘图软件,Linux下开发基于.NET的三维绘图程序
很多人可能知道使用.NET Core可以开发跨平台(包括Windows,Linux.MacOS)的App,但知道在Linux下使用.NET Core可以开发三维程序的恐怕就很少了.本文通过借助.NET ...
- lisp CAD二次开发 宗地线自动编号
lisp CAD二次开发 宗地线自动编号 (defun c:ZZ () (setvar "osmode" 0) (princ "\n选取宗地线-") (setq ...
- linux上三维绘图软件,linux下开发基于.net的三维绘图程序
很多人可能知道使用.NET Core可以开发跨平台(包括windows,linux.macOS)的App,但知道在Linux下使用.NET Core可以开发三维程序的恐怕就很少了.本文通过借助.NET ...
- C++ Builder开发AutoCAD应用程序的方法
※ 编程技巧 应用实践 ※ C++ Builder开发AutoCAD应用程序的方法 周永军(水利部山西水利水电勘测设计研究院 030024) [摘要]进行AutoCAD二次开发的程序设计方法为数众多 ...
- [WP]使用ApacheCordova开发HTML5-WindowsPhone应用程序
下载代码示例 这篇文章介绍 Apache 科尔多瓦,创建使用 HTML5 和 JavaScript,跨平台移动应用程序的框架,并显示了如何使用它为 Windows Phone 开发应用程序. Wind ...
- 那些对混合云开发和应用程序环境的错误认识
企业架构师们在开发混合云计算应用程序并为支持程序云计算而选择云计算供应商之前,他们应当好好完成他们的准备工作.选择错误的供应商和在错误的环境中开发应用程序都会对应用程序的运行性能.工作流程.变更成本. ...
- 开发微信小程序入门前
开发微信小程序入门前 百牛信息技术bainiu.ltd整理发布于博客园 2016年09月21日晚 微信发不了微信"小程序"的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论 ...
- WordPress 网站开发“微信小程序“实战(二)
原文链接:https://devework.com/wordpres...,转载请用明链注明来源,谢谢! 本文是"WordPress 开发微信小程序"系列的第二篇,本文记录的是开发 ...
- “六成应用开发不需要程序员”喜提热搜背后,RPA 会抢饭碗吗?
整理 | 伍杏玲 出品 | 程序人生(ID:coder_life) 近日,一则"六成应用开发不需要程序员"喜提热搜,据 Gartner 数据显示,到 2024 年,全球约有 65% ...
- 报表引擎API开发入门— EJB程序数据源
2019独角兽企业重金招聘Python工程师标准>>> 我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用 ...
最新文章
- 一段能用来统计ip访问的代码(自用)包括所在地
- ubuntu报错E: 无法获得锁 /var/cache/apt/archives/lock - open (11: 资源暂时不可用)E: 无法对目录 /var/cache/apt/archives/
- vue.js php,vue.js去哪下载
- 让老IE支持CSS3响应式布局
- Leetcode c语言-Implement strStr()
- [SAP ABAP开发技术总结]以二进制、字符模式下载文件
- 8月总庆祝:点击过百万,升级V8,进入前300名
- 超级整理术--读后笔记
- linux系统下的打印机驱动下载,foo2zjs linux环境下打印机驱动源代码 - 下载 - 搜珍网...
- Shell脚本之免交互操作
- Php中什么时候用单引号,PHP中单引号和双引号的用法举例
- 使用jupyter环境在数据集处理中遇到.ipynb_checkpoints no such file or directory的问题
- webpack与ts版本不兼容
- 关于ECharts中调整容器与图表的位置关系
- 中国移动国际mCloud体验再次升级,助力企业远程协同数字化转型
- java流星雨代码_流星雨代码
- java timer schedule_Java Timer的使用,timer.schedule定时执行
- SpringBoot中集成Redis实现对redis中数据的解析和存储
- 中国高校人工智能专业综合排名榜单,看看你母校上榜了吗?
- 如何从照片中提取文字?
热门文章
- 车型数据api 根据车系查询车型数据
- windows2016服务器优化,Windows server 2016性能调优问题
- 职工科研项目管理系统的设计与实现附代码
- C语言中文网设计模式,C语言和设计模式(访问者模式)
- 基于SMTP协议的E-MAIL电子邮件发送客户端软件C#实现
- 虚幻引擎4(UE4)的基本操作Actor的操作
- 树莓派4B搭建NAS系统(Samba)
- [单调栈 扫描线] BZOJ 4826 [Hnoi2017]影魔
- Python入门基础篇 No.26 —— 列表_复制列表_排序_revered逆序_max_min_sum
- IdentityHashMap 源代码