您好,还想问下CAD autoLISP的问题

您好,还想问下CAD autoLISP的问题,第1张

1、采用(setq ss1 (ssget '((0 "TEXT,MTEXT,LINE"))))将三种图元存入选择集,之后建立循环判定处理,好处是人工交互只需选择一次即可,写三条ssget,个人觉得 *** 作烦索了点。

2、用正则表达式判断,取出所需部分,不过较烦索,可试试杀杀CAD病毒或换个CAD版本之类,为什么这样子显示,不太清楚……我之前也有见过,不过现在搞不出来,无法测试。

3、如:

;;;主程序,选取多个单行文字,输出显示各个文字值

(defun c:cc ( / ss1 sslen num)

(setq ss1 (ssget '((0 "TEXT")))

sslen (sslength ss1)

num -1

)

(repeat sslen

;;调用子程序

(printtheword (cdr (assoc 1 (entget (ssname ss1 (1+ num))))))

)

(princ)

)

;;;子程序,将传递过来的文本前后换行并输出显示

(defun printtheword (str)

(princ "\n")

(princ str)

(princ "\n")

)

dcl文件是AutoCAD的一种二次开发工具AutoLisp的程序文件。DCL(Data Control Language)是数据库控制语言。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。

与之相关的文件还有:

LSP — 包含 AutoLISP 程序代码的 ASCII 文本文件。

FAS — 单个 LSP 程序文件的二进制编译版本。

VLX 一个或多个 LSP 文件和/或对话框控制语言 (DCL) 文件的编译集。

查看AutoCAD的帮助中“acad_devXXXchm”中的帮助说明中“Interacting with the Dialog Box from AutoLISP Code”的内容,有详细的调用说明。

摘要 本文阐述了在液压CAD系统中,针对AutoCAD R13 for Windows二次开发环境下,利用其内部ASI接口技术进行程序设计,实现与Visual Foxpro 30之间进行数据交换的方法。

关键词:AutoCAD 二次开发 接口 数据交换

1 引言

数据交换是CAD的核心技术,可以说没有数据的有效交换,就没有CAD优越性的充分发挥。在AutoCAD环境下进行CAD软件二次开发时,如何实现各模块间数据的有效交换,如何解决各类不同软件间的接口问题以及如何实现图形实体与非图形实体数据的联系,是二次开发CAD系统解决的关键问题。

本文着重讨论了AutoCAD R13 C4 for Windows环境下与Visual Foxpro 30之间进行的数据交换的ASI (AutoCAD SQL Interface)程序设计方法,并具体应用于液压系统的CAD软件中。

2 AutoCAD的开发与数据库的访问

象其他流行软件一样,Autodesk公司在AutoCAD R13内部提供了与外部数据库相互联系的机制。AutoCAD本身含有ASI(AutoCAD SQL Interface)、ASE(AutoCAD SQL Extension)和DBMS(Database Manager System)驱动程序几部分。AutoCAD与数据库文件之间进行数据交换的示意图如图所示。

AutoCAD与数据库文件之间数据交换示意图

ASI遵循ANSI/ISOSQL标准,是用于从AutoCAD中访问外部数据库的函数集。用ASI建立的应用程序,均可通过AutoCAD的开发应用系统;C语言开发的ADS,Visual C++40开发的ARX或其内部所自带的AutoLISP语言连接到AutoCAD系统中,同时可以在不同的数据库驱动程序支持下对不同的数据库进行数据的存取交换。

ASE是一组命令集,可将SQL连接到AtuoCAD系统中。其实质就是利用ASI建立的ADS/ARX的应用程序。使用ASE可以在AutoCAD内部对外部数据库中的数据文件的记录和字段进行查询和修改等 *** 作,可以将数据关联到图形实体和非图形实体(如哑图中尺寸参数替换和明细表等)上,实现图形和数据间的双向查询,并可以实现在图形中动态跟踪显示数据。

AutoCAD本身包含一组数据库驱动程序,其中每一个驱动程序都支持自己所连接的一种外部DBMS。其中用ADS/ARX或AutoLISP建立的应用程序,不必考虑DBMS专用的代码应用程序,是用ASI编程还是用ASE命令编程,其实质都是遵循通用SQL标准的。

AutoCAD支持的开发语言有Turbo C,Visual Basic 50,Visual C/C++4.0和内部拥有AutoLISP语言,其中C,VB通过建立生成ADS的函数,VC生成的是ARX函数,与AutoCAD信息相联系。

ASE作为AutoCAD内部的一组命令,可用编程方式执行。ASE作为AutoCAD访问数据库的核心具有更直接访问数据库的能力,允许应用程序对多种DBMS,DBMS内的多个数据库,库内的多张表进行数据访问。ASE和ASI可根据需要单独或同时使用。ASE方法在显示属性、编辑、列表框、基于查询等功能方面显得容易实现,但对于复杂的应用程序,就要使用ASI方式编程实现功能。

3 ASI方法的使用

31 ASI的支持文件与开发环境

AutoCAD R13 for windows所支持的ASI编程的文件都存放在缺省的\ACAD\WIN\ASE目录中。有ASI目标库(文件后缀为LIB)如asiatm80lib;ASI头文件(asih含ASI的通用定义)、(asierrh包含返回出错代码值的含义)、(asiapplh含主要的AutoCAD SQL结构查询语言的头文件)、(asisdatah含C++的用户接口定义)。

用ASI编制的应用程序,可用的编译器有:Borland C/C++4.0、Microsoft C/C++7.0、Microsoft Visual C++40以上版本等。

32 利用ASI与数据库交互处理的实现过程步骤

连通数据库:通过asi-initsql,ads-initdrv,asi-connect分别对ASI指定的DBMS驱动程序进行初始化,登录到所指定的数据库。

打开一个通讯句柄:这可通过调用asi-compile函数来实现。在ASI程序中,每条SQL语句都通过一个通讯句柄来进行处理。

编译SQL语句:通过调用asi-compile函数来实现。

执行SQL语句:用asi-iexecute函数执行SQL语句。

查询和处理数据:逐行查询结果,选取当前行,进行数据处理。所需的函数有:asi-fetch获得光标所在的当前行;asi-coldsc获得一列的说明;asi-delete删除当前行;asi-update更换当前行,等函数。

关闭通讯句柄:用asi-chandle函数关闭语句处理的句柄,并释放句柄。

断开与数据库的连接:调用asi-disconnect函数,断开登录的数据库;调用asi-temdrv函数,终止驱动程序;调用asi-temrsql函数,终止程序接口。

上述每一过程可用ASI的出错代码处理函数进行错误信息处理,用asi-err获得一条出错代码,用asi-errmsg函数获得一条出错信息。

4 实例说明

本例给出一个由Visual Foxpro30环境下,建立起来的液压系统软件包设计中的顺序阀数据库文件SXFLIBDBF,其数据结构如下表所示。

Name Type Diameter Pressure Flux Scale

顺序阀 X-F10D3-P- 100 200 400 05

顺序阀 2X-F10D3-AB/BA- 100 200 400 10

单向顺序阀 XA-F10D3-B- 100 200 400 07

单向顺序阀 XA-F10D3-B(A)- 100 200 400 05

编制ASI应用程序,实现所需功能:

(1)编制ins-rowvalue命令,实现将AutoCAD图形上的数据和名称做一标记插入到数据库的记录中。

(2)编制get-rowvalue命令,实现从数据库选定行中读取数据,在软件的对话框中显示出来,并按数据所提供的比例画出图形。

(3)编制fetch-dallue命令,实现从数据库中读取所有记录,在对话框的列表框内显示出来,以便用户调用,插入图形中。

由于AutoCAD可通过ASI/ASE、DBMS访问数据库,所以使许多应用项目的设计思路大为开阔,节省了设计者的工作时间,提高了工作效率,降低了投入成本,有利于集成系统的实现。

打开Visual Lisp编辑器有两种方式:

1AutoCAD2008及之前的版本,在菜单栏“工具(Tools)"下面,选择”AutoLisp"---->"Visual

Lisp编辑器"。(”AutoLisp"---->"导入应用"这个命令是用来加载AutoLisp脚本的)

2AutoCAD2009及之后的版本,在功能区的”管理“选项卡里可以直接打开Visual Lisp编辑器。

如何在AutoCAD Visual Lisp编辑器中创建与编译lisp程序

打开Visual Lisp编辑器之后新建一个文件,并另存为Lisp源文件。然后就可以在编辑窗口里输你的代码了。

代码编辑并调试确认无错误后,就可以在AutoCAD中使用了。

如何在AutoCAD Visual Lisp编辑器中创建与编译lisp程序

左边的按钮表示立即运行当前代码,如果有错误就会提示出来,右边按钮是切换到CAD窗口。

如果不需要再修改代码了还可以将代码进行编译以加速运行。

如何在AutoCAD Visual Lisp编辑器中创建与编译lisp程序

根据向导一步步进行编译很简单的。

如果在其他CAD图形文件中需使用当前代码文件或编译后的文件,就按上面第一点的,或者在命令行输入”ap",打开导入应用的对话框。

如何在AutoCAD Visual Lisp编辑器中创建与编译lisp程序

1是用来临时导入的,2是将程序加入CAD的启动组。

lisp解决重复性劳动问题

在设计和绘图中,你觉得都是简单粗暴的重复性工作,就可以考虑用AutoLisp来代替你做。

首先,AutoLisp也是一个程序设计语言,属于Common

Lisp的子集,同时加入了很多自定义的函数。即然是一个程序语言,就是其他编程语言能做的,它也能做,只是他的lisp语法跟一般的语言有些差另就是了,但是如果是一个没有VB、C#、C++(对应于AutoCAD的开发方式分别是VBA,net,ObjectArx)的基础的人来说,AutoLisp是很简单而且特别容易上手的一个语言。

作为一个编程语言,AutoLisp能做的很多:

1、扩充AutoCAD的原有命令。任何带有C:前缀的AutoLisp函数,在AutoCAD中都可以像"line" "circle"

"dim"等命令一样使用。

2、编写代码直接根据国标图库要求来绘出一些常用图库标准件什么的,或是代替人查找各种设计手册中的相关数据并继续使用。

3、进行参数化绘图,对于一些不特别复杂的系统,提供窄范围、大深度的专业设计自动化或者辅助系统,如发动机装配工具设计、纵使机主轴箱设计等。

4、DWG文件本质上是AutoCAD在图形生成和编辑中使用的数据库,可以将一些非图形信息的数据(粗糙度,高度,厚度。。)等存于DWG文件中作

为非图形数据库文件,然后利用Lisp程序进行读取等。

各种AutoCAD二次开发方式的比较:

由于 net语言和c++的学习曲线比较陡峭,所以简单易学的AutoLisp经常与VBA进行对比。(当然如果有VB的基础还是直接学VBA好了。)

AutoLISP擅长建立新命令和产生已有命令的连接。VBA擅长执行包括在其他应用程序中的组件,如Microsoft的Excel和Access。AutoLISP是基于表处理的编程体系,它允许程序员随意地存储和 *** 作传送信息,然而VBA部件包括数据和对复杂情况的各种有效 *** 作,这就是问题变得复杂的地方。

不过,在AutoCAD2000开始,Autodesk公司就在AutoCAD中加入了Visual

Lisp编辑器,引入了许多新函数扩充AutoLisp的功能,并支持ActiveX对象的访问方式,所以使用AutoLisp来与Word\Excel等程序进行交互也是变简单了。

另外,在创建带GUI图形界面的应用程序上,VBA当然是所见即所得的了,而AutoLisp是通过DCL文件来实现GUI的(语法很简单,但做不到所见即所得)这点是AutoLisp略逊一筹了。原文出自[

CAD自学网 ] 转载请保留原文链接:>

(defun c:tm ( )

(command "_line" (list -10 0) (list 10 0) "")

(setq l1 (entlast))

(command "_line" (list 0 10) (list 0 -10) "")

(setq l2 (entlast))

(command "_trim" l1 "" (list l2 (list 0 2)) "")

)

这是依照你追问一楼的基础写的,你看下吧

(defun c:dm ()

(command "-vbarun" "aaabbb")

)

上面的AAA是指你已经加载了的VBA宏,BBB是指宏里的模块名

感觉不行,

LISP和VBA是单独的开发环境,LISP对话框有DCL可以实现。相互可以调用整条完整函数,但要精确到一个文本框,似乎不能实现。

但可以试试第三方文件来实现,将VBA对话框内容填好后,寄存到TXT或其它的 API。。。中,再利用LISP进行调用。

以上就是关于您好,还想问下CAD autoLISP的问题全部的内容,包括:您好,还想问下CAD autoLISP的问题、autocad lisp文件里的数据怎么传给dcl文件、cad中怎样通过lisp调用dcl 详细点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9530148.html

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

发表评论

登录后才能评论

评论列表(0条)

保存