何谓CAD二次开发?AutoCAD都有哪些二次开发工具
朋友您好!二次开发就是补充Cad软件本身所不具备的功能。开发工具介绍:当前AutoCAD的二次开发工具主要有:VisualLisp、VBA、ObjectARX和.NET API等。其中,VisualLisp与VBA较为简单,特别是VBA,使用方便且开发速度较快,但其功能相比ObjectARX有所不足,尤其是对面向对象的功能支持不好。而ObjectARX基于VC平台,在C++的支持下,其功能非常强大,可以很好地运用各种面向对象技术,但其缺点是发开速度比较慢,同时对开发人员的能力要求较高。.NET是微软新推出的开发平台,具有众多优点。基于.NET平台对AutoCAD进行二次开发,可充分利用.NET 的各种优势,在保证功能强大的前提下大大提高开发速度。1 AutoLISPAutoLISP的全名是LIST Processing Language,她出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。2 ADSADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。3 ObjectARXObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(Auto CAD数据库)和AcEd(Auto CAD编译器),另外还有其它的一些重要库组件,如AcRX(Auto CAD实时扩展)、AcGi(Auto CAD图形接口)、AcGe(Auto CAD几何库)、ADSRX(Auto CAD开发系统实时扩展)。ObjectARX 还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作……
autocad 二次开发工具都有哪些
autocad有它的独特计算机语言,但是为了推广自己的产品,首推出了AuotoL ISP内嵌式高级编程语言,它可以利用autocad的平台,可以非常方便的利用AuotoL ISP对autocad进行二次开发,不过这个过程是非常麻烦和极为繁琐,使得怨声载道。所以,autocad公司又推出了Visual LISP(VLISP)专门用来加速的软件,但是这个软件是有知识产权的,一般不易得到。
所以autocad 二次开发工具不多。
怎样学习用C++进行cad二次开发?
C++对AutoCAD的二次开发主要引用AutoCAD发布的函数库,也就是SDK。AutoCAD有针对C++的编程模型,你可以用AutoCAD发布的C++函数库来操作该模型,最后编译生成arx文件文件,在arx文件里面有注册AutoCAD命令的语句,然后在AutoCAD里面加载编译生成的arx文件或dll,AutoCAD系统就会自动加载在arx文件注册的命令,在AutoCAD命令行输入该命令名就可以执行该命令了。
求:cad二次开发lisp程序
;;;;编于2010 5 31
(defun c:ggyy()
(setvar "cmdecho" 0)
(setq k (entsel "请选取直线:"))
(setq kdata (entget (car k)))
(setq k1 (cdr (assoc 10 kdata)))
(setq k2 (cdr (assoc 11 kdata)))
(setq t1x (car k1) t1y (cadr k1) t1z (caddr k1))
(setq t2x (car k2) t2y (cadr k2) t2z (caddr k2))
(setq ang (angle k1 k2))
(setq ss (ssget "X" '((0 . "CIRCLE"))))
(setq n 0 sum1 0 sum2 0)
(setq gg (ssadd) ggs (ssadd))
(setq sn (sslength ss))
(setq ffn (getfiled "选取文件" "" "txt" 1))
(setq ff (open ffn "w"))
(repeat sn
(setq en (ssname ss n))
(pk en)
(setq n (1+ n))
)
(setq ff (open ffn "a"))
(princ "线左边-------------" ff)
(princ "\n" ff)
(princ "总数量" ff)
(princ ": " ff)
(princ sum1 ff)
(princ "\n" ff)
(close ff)
(ps gg)
(setq ff (open ffn "a"))
(princ "\n" ff)
(princ "线右边-------------" ff)
(princ "\n" ff)
(princ "总数量" ff)
(princ ": " ff)
(princ sum2 ff)
(princ "\n" ff)
(close ff)
(pss ggs)
(prin1)
)
(defun pk(ww)
(setq ty (entget ww))
(setq cen (cdr (assoc 10 ty)))
(setq cx (car cen) cy (cadr cen) cz (caddr cen))
(setq wy (xk cx)) m3
(if (> cy wy)
(progn
(setq sum1 (1+ sum1))
(setq gg (ssadd ww gg))
)
(progn
(setq sum2 (1+ sum2))
(setq ggs (ssadd ww ggs))
)
)
(prin1)
)
;;;;求直线方程y=ax+b;;;
(defun xk(x)
(setq a (/ (- t2y t1y) (- t2x t1x)))
(setq b (- t1y (* a t1x)))
(setq y (+ b (* a x)))
)
;;
(defun ps(gs)
(setq nn 0 ss1 (ssadd))
(setq gf (sslength gs))
(close ff)
(repeat gf
(setq en (ssname gs nn))
(setq tg (entget en))
(setq tr (cdr (assoc 40 tg)))
(setq cg (cdr (assoc 10 tg)))
(setq gx (car cg) gy (cadr cg) gz (caddr cg))
(setq angg (+ ang (/ pi 2)))
(setq pp (polar cg angg tr))
(setq s (inters pp cg k1 k2 nil))
(setq sk (distance s cg ))
(setq ff (open ffn "a"))
(princ "+" ff)
(princ sk ff)
(princ "\n" ff)
(close ff)
(setq nn (+ 1 nn))
)
(prin1)
)
(defun pss(gs)
(setq nn 0 ss1 (ssadd))
(setq gf (sslength gs))
(close ff)
(repeat gf
(setq en (ssname gs nn))
(setq tg (entget en))
(setq tr (cdr (assoc 40 tg)))
(setq cg (cdr (assoc 10 tg)))
(setq gx (car cg) gy (cadr cg) gz (caddr cg))
(setq angg (- ang (/ pi 2)))
(setq pp (polar cg angg tr))
(setq s (inters pp cg k1 k2 nil))
(setq sk (distance s cg ))
(setq ff (open ffn "a"))
(princ "-" ff)
(princ sk ff)
(princ "\n" ff)
(close ff)
(setq nn (+ 1 nn))
)
(prin1)
)