lisp语言如何编写圆弧,请给与详细解释

lisp语言如何编写圆弧,请给与详细解释,第1张

CAD中画圆弧有几种方法

我只介绍一种(圆心、起点、端点)。

要画圆弧就需要以上3个要素(圆心、起点、端点)有明确数值,这3个要素可以在程序中设定,也可以定义变量在 *** 作是一一再输入变量数值(输入数值方法与CAD内部命令相同)。

最后用COMMAND执行画弧命令。

代码:

(DEFUN c:MARC(/ p0,p1,p2) ;;--MARC为本程序调用命令,也可设成其它字母,前提是不要与CAD内部命令冲突

(setq p0 (getpoint"o点:")) ;;------------拾取原点

(setq p1(getpoint"起点:")) ;;------------拾取起点

(setq p2 (getpoint"端点:")) ;;------------拾取端点

(command "osmode" 16575) ;;关掉捕捉以免在绘图时受到影响

(command "_arc" "c" p0 p1 p2)

(command "osmode" 191) ;;开捕捉

)

其它画法相似

AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACADLSP或类似文件中加入某些内容以便进行各种初始化 *** 作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些 *** 作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。

AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD2000或2002,最新版本是AutoCAD2004,其二次开发语言及工具也在不断地涌现

1AutoLISP

AutoLISP的全名是LISTProcessingLanguage,她出现于1985年推出的AutoCADR218中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。

3ADS

ADS的全名是AutoCADDevelopmentSystem,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。

4ObjectARX

ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARXforAutoCAD2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(AutoCAD数据库)和AcEd(AutoCAD编译器),另外还有其它的一些重要库组件,如AcRX(AutoCAD实时扩展)、AcGi(AutoCAD图形接口)、AcGe(AutoCAD几何库)、ADSRX(AutoCAD开发系统实时扩展)。ObjectARX还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互 *** 作。

5VisualLISP

VisualLISP已经被完整地集成到AutoCAD2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化 *** 作接口;用于执行基于AutoCAD内部事件的LISP程序的对象反应器;新增了能够对 *** 作系统文件进行 *** 作的函数。

6VBA

VBA即Mcrosoftoffice中的VisualBasicforApplications,它被集成到AutoCAD2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以 *** 作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。

(defun c:TIANCHONG ();填充1

(setq n (getvar 'dimscale))

(command "Bhatch" "P" "line" n "45")

(princ)

)

;;d1 d2 d3 d4分别为立方体底面四点,u1 u2 u3 u4为顶面对应四点

(defun c:lft( / d1 d2 d3 d4 u1 u2 u3 u4)

(setq os (getvar "osmode"))

(setq cm (getvar "cmdecho"))

(setvar "osmode" 0)

(setvar "cmdecho" 0)

(setq d1 (list 0 0 0))

(setq d2 (list 1000 0 0))

(setq d3 (list 1000 1000 0))

(setq d4 (list 0 1000 0))

(setq u1 (list 0 0 1000))

(setq u2 (list 1000 0 1000))

(setq u3 (list 1000 1000 1000))

(setq u4 (list 0 1000 1000))

(command "vpoint" "1,-15,1")

(command "line" d1 d2 d3 d4 d1 u1 u2 u3 u4 u1 "")

(command "line" d2 u2 "")

(command "line" d3 u3 "")

(command "line" d4 u4 "")

(setvar "osmode" os)

(setvar "cmdecho" cm)

(princ)

)

典型的人工智能语言主要有LISP、Prolog、Smalltalk、C++等。

在人工智能手册中介绍了七种人工智能语言:

LISP,PLANNER,CINNIVER,QLISP,POP-2,SAIL,FUZZY。近百种人工智能语言中,只有LISP和后起之秀Prolog是人工智能研究和应用中占重要地位的两种人工智能程序设计语言。

一般来说,人工智能语言应具备如下特点:

·具有符号处理能力(即非数值处理能力);

·适合于结构化程序设计,编程容易;

·具有递归功能和回溯功能;

·具有人机交互能力;

·适合于推理;

·既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹配机制。

可否认的。

谈到LISP和PROLOG两种AI语言的重要性,我们可以从美国AI界的权威学者、麻省理工学院教授PHWinston(温斯顿)所说的三段话来体会:

(1)温斯顿认为,LISP 语言是AI的数学,不仅对AI的机器实现有重要意义,而且是AI理论研究的重要工具。

(2)“在中世纪,拉丁文和希腊文的知识对所有学者来说,都是必不可少的。只懂一种语言的学者必然是一个残缺不全的学者,他缺乏从两个方面来观察世界所获得的那种理解力。同样地,现代的AI专业人员如果不能同时大致通晓LISP和Prolog,也犹如一个残疾人,因为就广义来说,这两种人工智能的主要语言的知识都是必不可少的。”

“我一直热衷于Lisp,Lisp是在MIT被制造并且在那儿成长起来的。”

(3)概括地说,计算机语言的发展正是一个从HOW型低级语言向WHAT型高级语言进化的过程在HOW型语言中,程序编制者必须详细说明运算是怎样(HOW)一步一步进行的;而在WHAT型语言中,程序编制者只需简单说明要做的事情是什么(WHAT) 。 现代的LISP语言是这些语言的佼佼者,因为采用Common Lisp格式的Lisp具有非凡的表现力,但是如何做某件事情仍然是有待于Lisp程序编制者来表达的东西相反,Prolog是一种明显地冲破了HOW型语言陈规的语言, 它鼓励程序编制者去描述情况和问题,而不是那些用来解决问题的详细步骤。”

由以上论述可以看出LISP语言和Prolog语言对人工智能学科和人工智能学者的重要性。

一般来说,LISP可以称为人工智能的汇编语言, Prolog是人工智能更高级的语言。

#include<stdioh>

#include<stringh>

int isLetter(char c){

    if(c>= 'A' && c<= 'Z') return 1;

    if(c>= 'a' && c<= 'z') return 1;

    return 0;

}

int ID(char s ,int m,int n){

    int i;

    int cnt = 0;

    for(i=m;i<=n;i++){

        if(s[i] == '(') cnt ++;

        if(s[i] == ',') {

                if(cnt == 1) return i;

        }

        if(s[i] == ')') cnt --;

    }

    return i;

}

int isS(char s,int m,int n){

    if(m == n && isLetter(s[m])) return 1;

    int k = ID(s,m,n);

    if( s[m] == '(' 

        && s[n] == ')' 

        && k > m 

        && k < n

        && isS(s,m+1,k-1)

        && isS(s,k+1,n-1)

    ) return 1;

    else return 0;

}

int main(){

    char s[4096];

    while(gets(s)){

        if(isS(s,0,strlen(s)-1)) printf("%s是S表达式\n",s);

        else printf( "%s不是S表达式\n",s); 

    }

}

以上就是关于lisp语言如何编写圆弧,请给与详细解释全部的内容,包括:lisp语言如何编写圆弧,请给与详细解释、cadlisp二次开发实例、AutoCAD-关于lisp语言-hatch填充的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10081732.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存