pline加点lisp_用Autolisp 在AutoCAD中实现多种曲线的绘制

用Autolisp 在AutoCAD中实现多种曲线的绘制

一、引言:

AutoCAD自1982年由Autodesk公司推出以来,经历了20年的发展更新,目前,已深入到包括机械、建筑、服装、航天航空、地质气象等等的众多领域中。AutoCAD已成为众多工程设计人员的首选设计软件,其格式也逐渐成为各CAD系统间的交换标准。

AutoCAD之所以有如此广泛的应用,除了其功能强大、易学易用外,还在于它是一个开放的交互软件,自85年推出的2.17版中,AutoCAD就内嵌了Autolisp语言,方便用户对其进行二次开发。自此,便有无数的工程技术人员成为Autodesk公司的编外程序员。随着AutoCAD版本的不断升级,它所支持的开发环境也不断增加,如:ADS、ARX、Diesel、DCL、

VBA等等。但由于方便和易学易用,Autolisp始终是技术人员在开发AutoCAD时运用最多的编程语言。同时也有更多的工程技术人员投入到Autolisp的学习之中来。但是,毕竟Autolisp也是一种编程语言,学习起来远不如学习AutoCAD的操作来得简单。故也有部分技术人员在学习过程中有危难情绪,针对这一情况,本人在此通过一种方法、三个例子来阐述Autolisp编程的一般过程,希望能对Autolisp初学者有所帮助。

二、Autolisp的二次开发:

(一)

问题提出:

尽管AutoCAD在各个领域中有着广泛的应用,但总不会面面俱到,在机械行业中,经常要画一些复杂曲线,如:三角函数曲线、渐开线、螺旋线等等。这些曲线在AutoCAD中没有专门的命令,难以用一般的方法绘制,尽管机械制图国家标准中有用圆弧近似替代渐开线和螺旋线的画法,但它们一不准确,不能通过装配干涉,二不方便,需要取很多位置点才能画出。而用Autolisp编程绘制,却能快速准确的得到所需图形。

(二)

曲线绘制:

1、

获取曲线的数学模型:

正弦曲线:x = a

y = sin a

渐开线:x = br * (cos a + a sin a)

y = br * (sin a + a cos a)

圆柱螺旋线:

x = r cos a

y = r sin a

z = s * a /

(2π)

(s取正值为右旋、取负值为左旋)

2、

设计程序框图:

3、

程序代码如下:

;画正弦曲:x=a , y=sin a ;

(defun

c:zxqx(/ da bp Ai lpt bp1 bp2)

(initget 1)

(setq bp (getpoint

"\n 起始点?:"))

(initget 7)

(setq da (getangle

"\n 角度增量?:"))

(setq Ai 0 Ae (* pi 2.0)

bp1 (car bp) bp2 (car (cdr bp)))

(while (< Ai

Ae)

(setq lpt (append lpt (list (list (+ bp1 Ai) (+ bp2 (sin

Ai))))))

(setq Ai (+ Ai da))

)

(setq lpt (append lpt (list

(list (+ bp1 Ae) (+ bp2 (sin Ae))))))

(setvar "cmdecho"

0)

(command

"pline")

(foreach pt lpt (command

pt))

(command ^c)

(command "pedit" "l"

"f")

(command ^c)

(setvar "cmdecho"

1)

)

;渐开线画法x=br*(cos(a)+a*sin(a))

y=br*(sin(a)-a*cos(a));

(defun

c:jkx(/ ti lpt ae pt bp1 bp2)

(initget 1)

(setq bp (getpoint

"\n 起始点?:"))

(initget 7)

(setq br (getreal

"\n 基圆半径?:"))

(initget 5)

(setq ai (getangle

"\n 起始角度?:"))

(initget 7)

(setq ae (getangle

"\n 终止角度?:"))

(initget 7)

(setq da (getangle

"\n 角度增量?:"))

(setq bp1 (car bp) bp2 (car

(cdr bp)))

(while (< ai

ae)

(setq lpt (append lpt (list (list (+ bp1 (* br (+ (cos ai) (* ai

(sin ai))))) (+ bp2 (* br (- (sin ai) (* ai (cos

ai)))))))))

(setq ai (+ ai da))

)

(setq lpt (append lpt (list

(list (+ bp1 (* br (+ (cos ae) (* ae (sin ae))))) (+ bp2 (* br (-

(sin ae) (* ae (cos ae)))))))))

(setvar "cmdecho"

0)

(command

"pline")

(foreach pt lpt (command

pt))

(command ^c)

(command "pedit" "l"

"f")

(command ^c)

(setvar "cmdecho"

1)

)

;螺旋线画法:x=r*cos(2pi/k) , y=r*sin(2pi/k) , z=(+/-)s/k

.

;

s:导程(+=右旋,-=左旋),k:每圈等分数。

(defun

c:yzlxx(/ bp r a s k n bp1 bp2 bp3 dmax di da pt lpt)

(initget 17)

(setq bp (getpoint

"\n 螺旋线中心:"))

(initget 7)

(setq r (getdist bp

"\n 螺旋线半径:"))

(initget 3)

(setq s (getreal "\n

导程:(+/右旋,-/左旋)"))

(initget 7)

(setq n (getreal "\n

圈数:"))

(initget 6)

(setq k (getint "\n

每圈等分数<36>:(宜取36的整倍数)"))

(if (not k) (setq k

36))

(setq bp1 (car bp) bp2

(cadr bp) bp3 (caddr bp))

(setq dmax (fix(* k

n)))

(setq da (/(* 2 pi)

k))

(setq a 0)

(setq di 0)

(while (<=

di dmax)

(setq lpt (append lpt (list (list (+ bp1 (* r (cos a))) (+ bp2 (* r

(sin a))) (+ bp3 (* (/ s k) di))))))

(setq di (+ di 1))

(setq a (+ da a))

)

(setvar "cmdecho"

0)

(command

"3dpoly")

(foreach pt lpt (command

pt))

(command ^c)

(setvar "cmdecho"

1)

)

4、几点说明:

(1)、以上三个程序编程思路是一样的,若需要绘制其它曲线,只要将其数学模型适当变换后代入程序中,即可实现所需功能。

(2)、该渐开线只能绘基圆上正东方向象限点上的渐开线,如要获取其他方向上的渐开线,可以在AutoCAD中修改获得。

(3)、绘制螺旋线的程序较2001年第6期上郭克希副教授的程序有所改进,原程序因为圈数n作为循环记数,只能是整数,使螺旋线圈数只能为整数,而该程序中圈数n可以为实数。

(4)、建议将lpt等参数设为局部变量,以减少内存占用率。

(5)、最后一个程序绘制螺旋线后未用f拟合曲线,是因为3dpoly绘制的曲线拟合后就不能作为实体的拉伸路径了。

5、

编入菜单:

(1)、编入下拉菜单:在acad.mnu文件中的

***POP7

**DRAW后的

ID_Pline

[&Polyline]^C^C_pline 下面加入以下语句即可

ID_jkx

[&Jkx]^C^C_jkx

ID_yzlxx

[y&Zlxx]^C^C_yzlxx

ID_3dpoly

[&3D

Polyline]^C^C_3dpoly

(2)、编入工具条:可直接在工具条上右键进行定制,在此不做赘述。

三、应用:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python从小白到大牛pdf 下载 资源共享_Kotlin从小白到大牛 (关东升著) 中文pdf高清版[12MB]...

本书是一本Kotlin语言学习立体教程&#xff0c;主要内容包括&#xff1a;Kotlin语法基础、Kotlin编码规范、数据类型、字符串、运算符、程序流程控制、函数、面向对象基础、继承与多态、抽象类与接口、高阶函数、Lambda表达式、数组、集合、函数式编程API、异常处理、线程、协程…

MySQL——基本配置

一、新建配置文件 在MySQL的安装目录下D:\Mysql\mysql-8.0.28-winx64\bin中新建一个文本文件&#xff0c;文件内容如下&#xff1a; [mysql] default-character-setutf8[mysqld] character-set-serverutf8 default-storage-engineINNODB sql_modeSTRICT_TRANS_TABLES,NO_ZERO_…

iphone win7无法识别_win7系统电脑不能识别iphone苹果设备的解决方法

win7系统使用久了&#xff0c;好多网友反馈说win7系统电脑不能识别iphone苹果设备的问题&#xff0c;非常不方便。有什么办法可以永久解决win7系统电脑不能识别iphone苹果设备的问题&#xff0c;面对win7系统电脑不能识别iphone苹果设备故障问题&#xff0c;我们只需要1)你的苹…

SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别

今天写程序时候&#xff0c;服务器端启动了&#xff0c;然后客户端总是连接不上&#xff0c;connect返回错误号是10061&#xff0c;服务器积极拒绝请求。 用telnet连接一下端口&#xff0c;发现服务端服务没有开启&#xff0c;但是我程序是启动的&#xff0c;用netstat -a 命令…

在mac上用文本编辑器写python_Mac系统Python解释器、PyCharm编辑器安装及使用方法详解...

『环境配置』- 工欲善其事&#xff0c;必先利其器 视频讲解教程&#xff1a;[Mac系统Python开发环境配置教程详解&#xff08;Python技术客栈&#xff09;](https://www.bilibili.com/video/av80761677)【开发环境配置】Mac系统Python开发环境配置教程详解&#xff08;Python技…

hdu 2149 巴什博弈

http://acm.hdu.edu.cn/showproblem.php?pid2149 分析&#xff1a;就是巴什博弈的概念。 题目要求&#xff1a;对于每组数据&#xff0c;在一行里按递增的顺序输出Lele第一次可以加的价。两个数据之间用空格隔开。如果Lele在第一次无论如何出价都无法买到这块土地&#xff0c;…

MySQL——数据库和表的增删改查

1、DDL操作数据库 ①查询 SHOW DATABASES;②创建 创建数据库 CREATE DATABASE 数据库名称; 创建数据库(判断&#xff0c;如果则创建) CREATE DATABASE IF NOT EXISTS 数据库名称;③删除 删除数据库 DROP DATABASE 数据库名称; 删除数据库(判断&#xff0c;如果存在则删除) DRO…

c_str()

1.string类成员函数c_str()的原型: const char *c_str()const;//返回一个以null终止的c字符串 2.c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式; c_str()函数返回一个指向正规…

45个极具冲击力的WordPress摄影网站模板

原文地址&#xff1a;http://www.goodfav.com/zh/wordpress-photography-website-templates-3577.html 互联网为摄影师和有创意的人想向世界展示自己最好的作品提供了最好的平台。你可以整合社会化媒体可以分享你的世界各地的图片。很多人都会认为&#xff0c;美丽的图画应该有…

python生成多个列表_python生成多个只含0,1元素的随机数组或列表(代码)

python生成多个只含0,1元素的随机数组或列表&#xff08;代码&#xff09; >>> import numpy as np >>> myarray np.random.randint(0,2,10)输出只含0,1元素的一维数组,长度为10 >>> myarray array([1, 1, 1, 0, 1, 0, 0, 1, 1, 0]) >>> m…

Java学习笔记——反射

1、反射概述 Java反射机制&#xff1a;是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象&#xff0c;调用方法的一种机制。由于这种动态性&#xff0c;可以极大地增强程序的灵活性。2、获取Class类的对象 我们要想通过反射去使用一个类&#xff0c…

Linux NULL定义

下面是/usr /include/linux下的stddef.h文件中的NULL定义&#xff1a;#undef NULL#if defined(__cplusplus)#define NULL 0#else#define NULL ((void *)0)#endif

Linux内核--网络协议栈深入分析(五)--套接字的绑定、监听、连接和断开

本文分析基于Linux Kernel 3.2.1 原创作品&#xff0c;转载请标明http://blog.csdn.net/yming0221/article/details/7996528 更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html 作者&#xff1a;闫明 1、套接字的绑定 创建完套接字服务器端会在应用层使…

pc模式 华为mate30_号称“重构想象”的华为Mate30系列,到底有多颠覆?一睹为快...

9月19日迎来了华为全球发布会&#xff0c;和9月11日的苹果新品发布会时间挨得非常近&#xff0c;大家感受到了什么吗&#xff1f;华为Mate30系列于北京时间9月19日晚上8点在慕尼黑正式亮相了&#xff0c;以“重构想象”为主题&#xff0c;发布了4款新机&#xff1a;Mate30、Mat…

python数据分析师书籍_如何自学成为数据分析师

展开全部 第1本《谁说菜2113鸟不会数据5261分析入门篇》 很有趣的数据分析书&#xff01;基本看过就能明白4102&#xff0c;以小说的1653形式讲解&#xff0c;很有代入感。包含了数据分析的结构化思维、数据处理技巧、数据展现的技术&#xff0c;很能帮我们提升职场竞争能力。找…

uvc摄像头

样品 1e4e:0109 第一批次 1e4e:0102 第二批次样品 1871:0101 1908:2311 uvc列表 www.ideasonboard.org/uvc/ www.ideasonboard.org/uvc/faq/

Java学习笔记——模块化

1、模块化概述&#xff1a; 无论是运行一个大型的软件系统&#xff0c;还是运行一个小的程序&#xff0c;即使程序 只需要使用Java的部分核心功能&#xff0c;JVM也要加载整个JRE环境。为了 让Java实现轻量化&#xff0c;Java9正式的推出了模块化统。Java被拆分成N 多个模块&a…

SDO_GEOMETRY Object Type

一、定义 SDO_GEOMETRY是MDSYS Schema下用户自定义的对象类型&#xff0c;用户在创建自己的数据表时&#xff0c;可以使用这种类型作为字段类型。使用了这种类型字段的数据表必须包含另外一个字段或者多个字段组合作为此表的唯一主键。这种类型的数据表&#xff0c;通常叫做空间…

python应声虫程序_Python编程基础

第 1章 准备工作 1 任务1&#xff0e;1 认识Python 1 1&#xff0e;1&#xff0e;1 初识Python 1 1&#xff0e;1&#xff0e;2 了解Python发展历史 2 1&#xff0e;1&#xff0e;3 了解Python特性 2 任务1&#xff0e;2 搭建Python环境 2 1&#xff0e;2&#xff…

650c公路车推荐_盘点2020年各价位高性价比入门公路车

2020年&#xff0c;一场突如其来的疫情席卷全球&#xff0c;使更多人明白了身体健康的可贵&#xff0c;越来越多的人开始参与到公路车骑行这一运动中来。面对各种良莠不齐的品牌、复杂晦涩难懂的配置表&#xff0c;不少刚入门的“小白”都一头雾水&#xff1a;该如何挑选适合自…