首页 >电脑教程 >电脑知识 >如何进行CAD Autolisp的二次开发?

如何进行CAD Autolisp的二次开发?

王林
王林转载
2024-01-04 10:18:301352浏览

请问CAD autolisp二次开发怎么弄啊

;;;灯管T4

(defun C:T4206()

用户输入T4206执行命令(不带任何参数)以加载并立即运行后续的程序。

(graphscr)

(setvar "cmdecho" 0)

;;;命令行显示关闭

(setq P1(getpoint "n请指定灯管(T4 206.5mm 6W)放置位置:"))

;;;设定一个插入点P1,返回点

(command "-INSERT" "D:/YZ_ZCAD/TK/DGT/T4206.dwg" "S" "1" P1 "0")

在执行CAD标准命令时,可以在命令前面加上"-"(参考CAD命令)来直接在命令行中执行命令,而不使用对话框。

在程序执行时,不能使用对话框来进行操作,可以在命令前加上“-”符号或使用变量FILEDIA来控制。还有一些特殊情况可以使用其他方式来进行控制。

(setvar "cmdecho" 1)

;;;命令行显示打开

(princ)

;;;结束语

)

;;;将以上文字放到LISP里面以任何英文名命名保存

在保存完文件后,我们可以在CAD中使用AP加载该文件。

;;;执行T4206命令执行插入命令,(确;认文件的存在)

就我个人看法而言,我认为VBA开发比LISP更为方便。学习LISP只需掌握基本的知识即可,不必深入学习。而LISP对话框开发(DCL)相比VBA要复杂得多。但是,有时候我们需要使用LISP函数来执行VBA函数。在AutoCAD的帮助文档中,有专门为开发人员提供的帮助,其中包含了很多详细的内容。很多编书人员也直接使用这些文档中的资源。我建议你可以去看一下,可能会对你有所帮助。

CAD二次开发修改LISP

(defun c:dz (/ oce1 n1 zn h1 sxh1 p1)

(vl-load-com)

(setq oce1 (getvar "cmdecho"))

(setvar "cmdecho" 0)

(setq ms (vla-get-modelspace

(vla-get-activedocument (vlax-get-acad-object)) 这行代码用于在AutoCAD中获取当前活动文档的对象。它使用了AutoCAD的VLAX(Visual LISP ActiveX)接口,通过vlax-get-acad-object函数获取AutoCAD的应用程序对象,然后使用vla-get-activedocument方法获取当前活动文档的对象。这样我们就可以对当前文档进行各种操作,如访问其属性、修改对象等。这一行代码在AutoCAD的LISP编程中非常常见,并且在处理文档对象时非常

)

)

(if qz

()

(setq qz "")

)

(if hz

()

(setq hz "")

)

(initget "c")

(setq nqz (getstring (strcat "n请输入前缀/c(为空): " )))

(cond

((= nqz "c") (setq qz ""))

(T (if (/= nqz "")(setq qz nqz)))

)

(setq hz "")

(if (not (setq n1 (getint "n请输入起始顺序号 : ")))

(setq n1 1)

)

(setq zn 1)

(if (not (setq h1 (getreal "n请指定文字高度 : ")))

(setq h1 2.5)

)

(setq sxh1 (strcat qz (itoa n1) hz))是一个常见的LISP表达式。在这个表达式中,qz、n1和hz是变量,通过拼接它们的值来创建一个新的字符串sxh1。 我将为您解释一下这个表达式的具体意思。 - qz是表示前缀的变量,它存储了一个字符串,例如"前缀"。 - n1是一个整数变量,它存储了一个数字值,例如10

(setq p1 (getpoint "n请指定插入点: "))

(while (/= p1 nil)

(setq p1 (vlax-3d-point p1))

(setq txt (vla-addtext

ms

sxh1

p1

h1

)

)

(setq

n1 (+ n1 zn)

sxh1 (strcat qz (itoa n1) hz)

p1 (getpoint "n请指定下一插入点: ")

)

)

(setvar "cmdecho" oce1)

(vlax-release-object ms)

(princ)

)

CAD二次开发LISP高手写个程序

改为如下即可:

(defun c:sdd ( dwg )

(setq dwg (getfiled "选择路径和文件名" "" "Dwg" 1))

(if (wcmatch dwg "* ####-##-## ##:##.dwg")

(setq dwg (substr dwg 1 (vl-string-search " " dwg)))

给定一个字符串变量`dwg`,我们可以使用`(setq dwg (substr dwg 1 (- (strlen dwg) 4)))`来对其进行处理。这行代码的作用是将`dwg`字符串的最后四个字符截取掉,并将结果重新赋值给`dwg`变量。这样做的目的可能是为了去除文件名或其他标识符中的文件扩展名。通过这行代码,我们可以实现对`dwg`字符串的修改,使其符合特定的要求或格式。

)

(setq dwg (strcat dwg " " (menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD HH:MM)") ".dwg"))

(command "_.saveas" "" dwg)

(princ)

)

以上是如何进行CAD Autolisp的二次开发?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:docexcel.net。如有侵权,请联系admin@php.cn删除